{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:45:36.691874Z",
     "start_time": "2019-10-04T04:45:36.688882Z"
    }
   },
   "source": [
    "# 时序预测练习--AI电力能耗预测大赛\n",
    "\n",
    "案例数据来源于江苏镇江扬中市的高新区企业历史近2年的用电量，希望能够根据历史数据去精准预测未来一个月每一天的用电量，这是一个很典型的时序数据回归类问题，我们来看看如何用数据驱动的建模方法去完成这样一个预测。\n",
    "\n",
    "**竞赛数据**\n",
    "\n",
    "本次竞赛主要数据源为企业用电量表Tianchi_power2，我们抽取了扬中市高新区的1000多家企业的用电量（数据进行了脱敏），包括企业ID（匿名化处理），日期和用电量。具体字段如下表：\n",
    "\n",
    "tianchi_power2\n",
    "\n",
    "| 列名              | 类型   | 含义   | 示例     |\n",
    "| ----------------- | ------ | ------ | -------- |\n",
    "| record_date       | string | 日期   | 20150101 |\n",
    "| user_id           | bigint | 企业id | 1        |\n",
    "| power_consumption | bigint | 用电量 | 1031     |\n",
    "| ...               | ...    | ...    | ...      |\n",
    "\n",
    "赛题还有天气数据，本案例着重练习，不使用这个数据。\n",
    "\n",
    "**选手提交结果表**\n",
    "\n",
    "tianchi_power_answer\n",
    "\n",
    "| 列名              | 类型   | 含义         | 示例     |\n",
    "| ----------------- | ------ | ------------ | -------- |\n",
    "| predict_date      | string | 日期         | 2016/9/1 |\n",
    "| power_consumption | bigint | 预测的用电量 | 1031     |\n",
    "\n",
    "\n",
    "![](https://work.alibaba-inc.com/aliwork_tfs/g01_alibaba-inc_com/tfscom/TB1oAMfQFXXXXX1XVXXXXXXXXXX.tfsprivate.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 载入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:02:32.600055Z",
     "start_time": "2019-10-04T05:02:30.433396Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:51:41.116476Z",
     "start_time": "2019-10-04T04:51:40.523890Z"
    }
   },
   "outputs": [],
   "source": [
    "data_1 = pd.read_csv('../../data/ai_power/zhenjiang_power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:51:56.416064Z",
     "start_time": "2019-10-04T04:51:56.410032Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>1135.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>570.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3418.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3968.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>3986.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id record_date  power_consumption\n",
       "0        1  2015-01-01             1135.0\n",
       "1        1  2015-01-02              570.0\n",
       "2        1  2015-01-03             3418.0\n",
       "3        1  2015-01-04             3968.0\n",
       "4        1  2015-01-05             3986.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:55:49.245691Z",
     "start_time": "2019-10-04T04:55:49.207762Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['2015-01-01',\n",
       " '2015-01-02',\n",
       " '2015-01-03',\n",
       " '2015-01-04',\n",
       " '2015-01-05',\n",
       " '2015-01-06',\n",
       " '2015-01-07',\n",
       " '2015-01-08',\n",
       " '2015-01-09',\n",
       " '2015-01-10',\n",
       " '2015-01-11',\n",
       " '2015-01-12',\n",
       " '2015-01-13',\n",
       " '2015-01-14',\n",
       " '2015-01-15',\n",
       " '2015-01-16',\n",
       " '2015-01-17',\n",
       " '2015-01-18',\n",
       " '2015-01-19',\n",
       " '2015-01-20',\n",
       " '2015-01-21',\n",
       " '2015-01-22',\n",
       " '2015-01-23',\n",
       " '2015-01-24',\n",
       " '2015-01-25',\n",
       " '2015-01-26',\n",
       " '2015-01-27',\n",
       " '2015-01-28',\n",
       " '2015-01-29',\n",
       " '2015-01-30',\n",
       " '2015-01-31',\n",
       " '2015-02-01',\n",
       " '2015-02-02',\n",
       " '2015-02-03',\n",
       " '2015-02-04',\n",
       " '2015-02-05',\n",
       " '2015-02-06',\n",
       " '2015-02-07',\n",
       " '2015-02-08',\n",
       " '2015-02-09',\n",
       " '2015-02-10',\n",
       " '2015-02-11',\n",
       " '2015-02-12',\n",
       " '2015-02-13',\n",
       " '2015-02-14',\n",
       " '2015-02-15',\n",
       " '2015-02-16',\n",
       " '2015-02-17',\n",
       " '2015-02-18',\n",
       " '2015-02-19',\n",
       " '2015-02-20',\n",
       " '2015-02-21',\n",
       " '2015-02-22',\n",
       " '2015-02-23',\n",
       " '2015-02-24',\n",
       " '2015-02-25',\n",
       " '2015-02-26',\n",
       " '2015-02-27',\n",
       " '2015-02-28',\n",
       " '2015-03-01',\n",
       " '2015-03-02',\n",
       " '2015-03-03',\n",
       " '2015-03-04',\n",
       " '2015-03-05',\n",
       " '2015-03-06',\n",
       " '2015-03-07',\n",
       " '2015-03-08',\n",
       " '2015-03-09',\n",
       " '2015-03-10',\n",
       " '2015-03-11',\n",
       " '2015-03-12',\n",
       " '2015-03-13',\n",
       " '2015-03-14',\n",
       " '2015-03-15',\n",
       " '2015-03-16',\n",
       " '2015-03-17',\n",
       " '2015-03-18',\n",
       " '2015-03-19',\n",
       " '2015-03-20',\n",
       " '2015-03-21',\n",
       " '2015-03-22',\n",
       " '2015-03-23',\n",
       " '2015-03-24',\n",
       " '2015-03-25',\n",
       " '2015-03-26',\n",
       " '2015-03-27',\n",
       " '2015-03-28',\n",
       " '2015-03-29',\n",
       " '2015-03-30',\n",
       " '2015-03-31',\n",
       " '2015-04-01',\n",
       " '2015-04-02',\n",
       " '2015-04-03',\n",
       " '2015-04-04',\n",
       " '2015-04-05',\n",
       " '2015-04-06',\n",
       " '2015-04-07',\n",
       " '2015-04-08',\n",
       " '2015-04-09',\n",
       " '2015-04-10',\n",
       " '2015-04-11',\n",
       " '2015-04-12',\n",
       " '2015-04-13',\n",
       " '2015-04-14',\n",
       " '2015-04-15',\n",
       " '2015-04-16',\n",
       " '2015-04-17',\n",
       " '2015-04-18',\n",
       " '2015-04-19',\n",
       " '2015-04-20',\n",
       " '2015-04-21',\n",
       " '2015-04-22',\n",
       " '2015-04-23',\n",
       " '2015-04-24',\n",
       " '2015-04-25',\n",
       " '2015-04-26',\n",
       " '2015-04-27',\n",
       " '2015-04-28',\n",
       " '2015-04-29',\n",
       " '2015-04-30',\n",
       " '2015-05-01',\n",
       " '2015-05-02',\n",
       " '2015-05-03',\n",
       " '2015-05-04',\n",
       " '2015-05-05',\n",
       " '2015-05-06',\n",
       " '2015-05-07',\n",
       " '2015-05-08',\n",
       " '2015-05-09',\n",
       " '2015-05-10',\n",
       " '2015-05-11',\n",
       " '2015-05-12',\n",
       " '2015-05-13',\n",
       " '2015-05-14',\n",
       " '2015-05-15',\n",
       " '2015-05-16',\n",
       " '2015-05-17',\n",
       " '2015-05-18',\n",
       " '2015-05-19',\n",
       " '2015-05-20',\n",
       " '2015-05-21',\n",
       " '2015-05-22',\n",
       " '2015-05-23',\n",
       " '2015-05-24',\n",
       " '2015-05-25',\n",
       " '2015-05-26',\n",
       " '2015-05-27',\n",
       " '2015-05-28',\n",
       " '2015-05-29',\n",
       " '2015-05-30',\n",
       " '2015-05-31',\n",
       " '2015-06-01',\n",
       " '2015-06-02',\n",
       " '2015-06-03',\n",
       " '2015-06-04',\n",
       " '2015-06-05',\n",
       " '2015-06-06',\n",
       " '2015-06-07',\n",
       " '2015-06-08',\n",
       " '2015-06-09',\n",
       " '2015-06-10',\n",
       " '2015-06-11',\n",
       " '2015-06-12',\n",
       " '2015-06-13',\n",
       " '2015-06-14',\n",
       " '2015-06-15',\n",
       " '2015-06-16',\n",
       " '2015-06-17',\n",
       " '2015-06-18',\n",
       " '2015-06-19',\n",
       " '2015-06-20',\n",
       " '2015-06-21',\n",
       " '2015-06-22',\n",
       " '2015-06-23',\n",
       " '2015-06-24',\n",
       " '2015-06-25',\n",
       " '2015-06-26',\n",
       " '2015-06-27',\n",
       " '2015-06-28',\n",
       " '2015-06-29',\n",
       " '2015-06-30',\n",
       " '2015-07-01',\n",
       " '2015-07-02',\n",
       " '2015-07-03',\n",
       " '2015-07-04',\n",
       " '2015-07-05',\n",
       " '2015-07-06',\n",
       " '2015-07-07',\n",
       " '2015-07-08',\n",
       " '2015-07-09',\n",
       " '2015-07-10',\n",
       " '2015-07-11',\n",
       " '2015-07-12',\n",
       " '2015-07-13',\n",
       " '2015-07-14',\n",
       " '2015-07-15',\n",
       " '2015-07-16',\n",
       " '2015-07-17',\n",
       " '2015-07-18',\n",
       " '2015-07-19',\n",
       " '2015-07-20',\n",
       " '2015-07-21',\n",
       " '2015-07-22',\n",
       " '2015-07-23',\n",
       " '2015-07-24',\n",
       " '2015-07-25',\n",
       " '2015-07-26',\n",
       " '2015-07-27',\n",
       " '2015-07-28',\n",
       " '2015-07-29',\n",
       " '2015-07-30',\n",
       " '2015-07-31',\n",
       " '2015-08-01',\n",
       " '2015-08-02',\n",
       " '2015-08-03',\n",
       " '2015-08-04',\n",
       " '2015-08-05',\n",
       " '2015-08-06',\n",
       " '2015-08-07',\n",
       " '2015-08-08',\n",
       " '2015-08-09',\n",
       " '2015-08-10',\n",
       " '2015-08-11',\n",
       " '2015-08-12',\n",
       " '2015-08-13',\n",
       " '2015-08-14',\n",
       " '2015-08-15',\n",
       " '2015-08-16',\n",
       " '2015-08-17',\n",
       " '2015-08-18',\n",
       " '2015-08-19',\n",
       " '2015-08-20',\n",
       " '2015-08-21',\n",
       " '2015-08-22',\n",
       " '2015-08-23',\n",
       " '2015-08-24',\n",
       " '2015-08-25',\n",
       " '2015-08-26',\n",
       " '2015-08-27',\n",
       " '2015-08-28',\n",
       " '2015-08-29',\n",
       " '2015-08-30',\n",
       " '2015-08-31',\n",
       " '2015-09-01',\n",
       " '2015-09-02',\n",
       " '2015-09-03',\n",
       " '2015-09-04',\n",
       " '2015-09-05',\n",
       " '2015-09-06',\n",
       " '2015-09-07',\n",
       " '2015-09-08',\n",
       " '2015-09-09',\n",
       " '2015-09-10',\n",
       " '2015-09-11',\n",
       " '2015-09-12',\n",
       " '2015-09-13',\n",
       " '2015-09-14',\n",
       " '2015-09-15',\n",
       " '2015-09-16',\n",
       " '2015-09-17',\n",
       " '2015-09-18',\n",
       " '2015-09-19',\n",
       " '2015-09-20',\n",
       " '2015-09-21',\n",
       " '2015-09-22',\n",
       " '2015-09-23',\n",
       " '2015-09-24',\n",
       " '2015-09-25',\n",
       " '2015-09-26',\n",
       " '2015-09-27',\n",
       " '2015-09-28',\n",
       " '2015-09-29',\n",
       " '2015-09-30',\n",
       " '2015-10-01',\n",
       " '2015-10-02',\n",
       " '2015-10-03',\n",
       " '2015-10-04',\n",
       " '2015-10-05',\n",
       " '2015-10-06',\n",
       " '2015-10-07',\n",
       " '2015-10-08',\n",
       " '2015-10-09',\n",
       " '2015-10-10',\n",
       " '2015-10-11',\n",
       " '2015-10-12',\n",
       " '2015-10-13',\n",
       " '2015-10-14',\n",
       " '2015-10-15',\n",
       " '2015-10-16',\n",
       " '2015-10-17',\n",
       " '2015-10-18',\n",
       " '2015-10-19',\n",
       " '2015-10-20',\n",
       " '2015-10-21',\n",
       " '2015-10-22',\n",
       " '2015-10-23',\n",
       " '2015-10-24',\n",
       " '2015-10-25',\n",
       " '2015-10-26',\n",
       " '2015-10-27',\n",
       " '2015-10-28',\n",
       " '2015-10-29',\n",
       " '2015-10-30',\n",
       " '2015-10-31',\n",
       " '2015-11-01',\n",
       " '2015-11-02',\n",
       " '2015-11-03',\n",
       " '2015-11-04',\n",
       " '2015-11-05',\n",
       " '2015-11-06',\n",
       " '2015-11-07',\n",
       " '2015-11-08',\n",
       " '2015-11-09',\n",
       " '2015-11-10',\n",
       " '2015-11-11',\n",
       " '2015-11-12',\n",
       " '2015-11-13',\n",
       " '2015-11-14',\n",
       " '2015-11-15',\n",
       " '2015-11-16',\n",
       " '2015-11-17',\n",
       " '2015-11-18',\n",
       " '2015-11-19',\n",
       " '2015-11-20',\n",
       " '2015-11-21',\n",
       " '2015-11-22',\n",
       " '2015-11-23',\n",
       " '2015-11-24',\n",
       " '2015-11-25',\n",
       " '2015-11-26',\n",
       " '2015-11-27',\n",
       " '2015-11-28',\n",
       " '2015-11-29',\n",
       " '2015-11-30',\n",
       " '2015-12-01',\n",
       " '2015-12-02',\n",
       " '2015-12-03',\n",
       " '2015-12-04',\n",
       " '2015-12-05',\n",
       " '2015-12-06',\n",
       " '2015-12-07',\n",
       " '2015-12-08',\n",
       " '2015-12-09',\n",
       " '2015-12-10',\n",
       " '2015-12-11',\n",
       " '2015-12-12',\n",
       " '2015-12-13',\n",
       " '2015-12-14',\n",
       " '2015-12-15',\n",
       " '2015-12-16',\n",
       " '2015-12-17',\n",
       " '2015-12-18',\n",
       " '2015-12-19',\n",
       " '2015-12-20',\n",
       " '2015-12-21',\n",
       " '2015-12-22',\n",
       " '2015-12-23',\n",
       " '2015-12-24',\n",
       " '2015-12-25',\n",
       " '2015-12-26',\n",
       " '2015-12-27',\n",
       " '2015-12-28',\n",
       " '2015-12-29',\n",
       " '2015-12-30',\n",
       " '2015-12-31',\n",
       " '2016-01-01',\n",
       " '2016-01-02',\n",
       " '2016-01-03',\n",
       " '2016-01-04',\n",
       " '2016-01-05',\n",
       " '2016-01-06',\n",
       " '2016-01-07',\n",
       " '2016-01-08',\n",
       " '2016-01-09',\n",
       " '2016-01-10',\n",
       " '2016-01-11',\n",
       " '2016-01-12',\n",
       " '2016-01-13',\n",
       " '2016-01-14',\n",
       " '2016-01-15',\n",
       " '2016-01-16',\n",
       " '2016-01-17',\n",
       " '2016-01-18',\n",
       " '2016-01-19',\n",
       " '2016-01-20',\n",
       " '2016-01-21',\n",
       " '2016-01-22',\n",
       " '2016-01-23',\n",
       " '2016-01-24',\n",
       " '2016-01-25',\n",
       " '2016-01-26',\n",
       " '2016-01-27',\n",
       " '2016-01-28',\n",
       " '2016-01-29',\n",
       " '2016-01-30',\n",
       " '2016-01-31',\n",
       " '2016-02-01',\n",
       " '2016-02-02',\n",
       " '2016-02-03',\n",
       " '2016-02-04',\n",
       " '2016-02-05',\n",
       " '2016-02-06',\n",
       " '2016-02-07',\n",
       " '2016-02-08',\n",
       " '2016-02-09',\n",
       " '2016-02-10',\n",
       " '2016-02-11',\n",
       " '2016-02-12',\n",
       " '2016-02-13',\n",
       " '2016-02-14',\n",
       " '2016-02-15',\n",
       " '2016-02-16',\n",
       " '2016-02-17',\n",
       " '2016-02-18',\n",
       " '2016-02-19',\n",
       " '2016-02-20',\n",
       " '2016-02-21',\n",
       " '2016-02-22',\n",
       " '2016-02-23',\n",
       " '2016-02-24',\n",
       " '2016-02-25',\n",
       " '2016-02-26',\n",
       " '2016-02-27',\n",
       " '2016-02-28',\n",
       " '2016-02-29',\n",
       " '2016-03-01',\n",
       " '2016-03-02',\n",
       " '2016-03-03',\n",
       " '2016-03-04',\n",
       " '2016-03-05',\n",
       " '2016-03-06',\n",
       " '2016-03-07',\n",
       " '2016-03-08',\n",
       " '2016-03-09',\n",
       " '2016-03-10',\n",
       " '2016-03-11',\n",
       " '2016-03-12',\n",
       " '2016-03-13',\n",
       " '2016-03-14',\n",
       " '2016-03-15',\n",
       " '2016-03-16',\n",
       " '2016-03-17',\n",
       " '2016-03-18',\n",
       " '2016-03-19',\n",
       " '2016-03-20',\n",
       " '2016-03-21',\n",
       " '2016-03-22',\n",
       " '2016-03-23',\n",
       " '2016-03-24',\n",
       " '2016-03-25',\n",
       " '2016-03-26',\n",
       " '2016-03-27',\n",
       " '2016-03-28',\n",
       " '2016-03-29',\n",
       " '2016-03-30',\n",
       " '2016-03-31',\n",
       " '2016-04-01',\n",
       " '2016-04-02',\n",
       " '2016-04-03',\n",
       " '2016-04-04',\n",
       " '2016-04-05',\n",
       " '2016-04-06',\n",
       " '2016-04-07',\n",
       " '2016-04-08',\n",
       " '2016-04-09',\n",
       " '2016-04-10',\n",
       " '2016-04-11',\n",
       " '2016-04-12',\n",
       " '2016-04-13',\n",
       " '2016-04-14',\n",
       " '2016-04-15',\n",
       " '2016-04-16',\n",
       " '2016-04-17',\n",
       " '2016-04-18',\n",
       " '2016-04-19',\n",
       " '2016-04-20',\n",
       " '2016-04-21',\n",
       " '2016-04-22',\n",
       " '2016-04-23',\n",
       " '2016-04-24',\n",
       " '2016-04-25',\n",
       " '2016-04-26',\n",
       " '2016-04-27',\n",
       " '2016-04-28',\n",
       " '2016-04-29',\n",
       " '2016-04-30',\n",
       " '2016-05-01',\n",
       " '2016-05-02',\n",
       " '2016-05-03',\n",
       " '2016-05-04',\n",
       " '2016-05-05',\n",
       " '2016-05-06',\n",
       " '2016-05-07',\n",
       " '2016-05-08',\n",
       " '2016-05-09',\n",
       " '2016-05-10',\n",
       " '2016-05-11',\n",
       " '2016-05-12',\n",
       " '2016-05-13',\n",
       " '2016-05-14',\n",
       " '2016-05-15',\n",
       " '2016-05-16',\n",
       " '2016-05-17',\n",
       " '2016-05-18',\n",
       " '2016-05-19',\n",
       " '2016-05-20',\n",
       " '2016-05-21',\n",
       " '2016-05-22',\n",
       " '2016-05-23',\n",
       " '2016-05-24',\n",
       " '2016-05-25',\n",
       " '2016-05-26',\n",
       " '2016-05-27',\n",
       " '2016-05-28',\n",
       " '2016-05-29',\n",
       " '2016-05-30',\n",
       " '2016-05-31',\n",
       " '2016-06-01',\n",
       " '2016-06-02',\n",
       " '2016-06-03',\n",
       " '2016-06-04',\n",
       " '2016-06-05',\n",
       " '2016-06-06',\n",
       " '2016-06-07',\n",
       " '2016-06-08',\n",
       " '2016-06-09',\n",
       " '2016-06-10',\n",
       " '2016-06-11',\n",
       " '2016-06-12',\n",
       " '2016-06-13',\n",
       " '2016-06-14',\n",
       " '2016-06-15',\n",
       " '2016-06-16',\n",
       " '2016-06-17',\n",
       " '2016-06-18',\n",
       " '2016-06-19',\n",
       " '2016-06-20',\n",
       " '2016-06-21',\n",
       " '2016-06-22',\n",
       " '2016-06-23',\n",
       " '2016-06-24',\n",
       " '2016-06-25',\n",
       " '2016-06-26',\n",
       " '2016-06-27',\n",
       " '2016-06-28',\n",
       " '2016-06-29',\n",
       " '2016-06-30',\n",
       " '2016-07-01',\n",
       " '2016-07-02',\n",
       " '2016-07-03',\n",
       " '2016-07-04',\n",
       " '2016-07-05',\n",
       " '2016-07-06',\n",
       " '2016-07-07',\n",
       " '2016-07-08',\n",
       " '2016-07-09',\n",
       " '2016-07-10',\n",
       " '2016-07-11',\n",
       " '2016-07-12',\n",
       " '2016-07-13',\n",
       " '2016-07-14',\n",
       " '2016-07-15',\n",
       " '2016-07-16',\n",
       " '2016-07-17',\n",
       " '2016-07-18',\n",
       " '2016-07-19',\n",
       " '2016-07-20',\n",
       " '2016-07-21',\n",
       " '2016-07-22',\n",
       " '2016-07-23',\n",
       " '2016-07-24',\n",
       " '2016-07-25',\n",
       " '2016-07-26',\n",
       " '2016-07-27',\n",
       " '2016-07-28',\n",
       " '2016-07-29',\n",
       " '2016-07-30',\n",
       " '2016-07-31',\n",
       " '2016-08-01',\n",
       " '2016-08-02',\n",
       " '2016-08-03',\n",
       " '2016-08-04',\n",
       " '2016-08-05',\n",
       " '2016-08-06',\n",
       " '2016-08-07',\n",
       " '2016-08-08',\n",
       " '2016-08-09',\n",
       " '2016-08-10',\n",
       " '2016-08-11',\n",
       " '2016-08-12',\n",
       " '2016-08-13',\n",
       " '2016-08-14',\n",
       " '2016-08-15',\n",
       " '2016-08-16',\n",
       " '2016-08-17',\n",
       " '2016-08-18',\n",
       " '2016-08-19',\n",
       " '2016-08-20',\n",
       " '2016-08-21',\n",
       " '2016-08-22',\n",
       " '2016-08-23',\n",
       " '2016-08-24',\n",
       " '2016-08-25',\n",
       " '2016-08-26',\n",
       " '2016-08-27',\n",
       " '2016-08-28',\n",
       " '2016-08-29',\n",
       " '2016-08-30',\n",
       " '2016-08-31']"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted(data_1['record_date'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:52:19.942581Z",
     "start_time": "2019-10-04T04:52:19.834291Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>885486.000000</td>\n",
       "      <td>8.854860e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>727.500000</td>\n",
       "      <td>2.619980e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>419.733783</td>\n",
       "      <td>3.154743e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>364.000000</td>\n",
       "      <td>4.200000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>727.500000</td>\n",
       "      <td>2.610000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1091.000000</td>\n",
       "      <td>8.250000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1454.000000</td>\n",
       "      <td>1.310016e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             user_id  power_consumption\n",
       "count  885486.000000       8.854860e+05\n",
       "mean      727.500000       2.619980e+03\n",
       "std       419.733783       3.154743e+04\n",
       "min         1.000000       1.000000e+00\n",
       "25%       364.000000       4.200000e+01\n",
       "50%       727.500000       2.610000e+02\n",
       "75%      1091.000000       8.250000e+02\n",
       "max      1454.000000       1.310016e+06"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_1.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:53:44.836735Z",
     "start_time": "2019-10-04T04:53:44.789044Z"
    }
   },
   "outputs": [],
   "source": [
    "data_2 = pd.read_csv('../../data/ai_power/zhenjiang_power_9.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:53:50.323747Z",
     "start_time": "2019-10-04T04:53:50.316735Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>user_id</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016/9/2</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016/9/3</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016/9/4</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016/9/1</td>\n",
       "      <td>49</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016/9/2</td>\n",
       "      <td>49</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  user_id  power_consumption\n",
       "0    2016/9/2       20                  1\n",
       "1    2016/9/3       20                  1\n",
       "2    2016/9/4       20                  1\n",
       "3    2016/9/1       49                  1\n",
       "4    2016/9/2       49                  1"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_2.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到数据集1和2的时间格式不一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T04:56:11.482220Z",
     "start_time": "2019-10-04T04:56:11.476235Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['2016/9/1',\n",
       " '2016/9/10',\n",
       " '2016/9/11',\n",
       " '2016/9/12',\n",
       " '2016/9/13',\n",
       " '2016/9/14',\n",
       " '2016/9/15',\n",
       " '2016/9/16',\n",
       " '2016/9/17',\n",
       " '2016/9/18',\n",
       " '2016/9/19',\n",
       " '2016/9/2',\n",
       " '2016/9/20',\n",
       " '2016/9/21',\n",
       " '2016/9/22',\n",
       " '2016/9/23',\n",
       " '2016/9/24',\n",
       " '2016/9/25',\n",
       " '2016/9/26',\n",
       " '2016/9/27',\n",
       " '2016/9/28',\n",
       " '2016/9/29',\n",
       " '2016/9/3',\n",
       " '2016/9/30',\n",
       " '2016/9/4',\n",
       " '2016/9/5',\n",
       " '2016/9/6',\n",
       " '2016/9/7',\n",
       " '2016/9/8',\n",
       " '2016/9/9']"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted(data_2['record_date'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:00:41.020028Z",
     "start_time": "2019-10-04T05:00:40.981163Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:2: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
      "of pandas will change to not sort by default.\n",
      "\n",
      "To accept the future behavior, pass 'sort=True'.\n",
      "\n",
      "To retain the current behavior and silence the warning, pass sort=False\n",
      "\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# 合并两个数据集\n",
    "train_df = pd.concat([data_1, data_2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:00:47.045105Z",
     "start_time": "2019-10-04T05:00:47.041116Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(885486, 3)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:00:50.272788Z",
     "start_time": "2019-10-04T05:00:50.268797Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(43620, 3)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:00:58.046744Z",
     "start_time": "2019-10-04T05:00:58.042725Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(929106, 3)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:01:20.181938Z",
     "start_time": "2019-10-04T05:01:20.177949Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "929106 == 43620 + 885486"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:01:36.892362Z",
     "start_time": "2019-10-04T05:01:36.885351Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>record_date</th>\n",
       "      <th>user_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1135.0</td>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>570.0</td>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3418.0</td>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3968.0</td>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3986.0</td>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   power_consumption record_date  user_id\n",
       "0             1135.0  2015-01-01        1\n",
       "1              570.0  2015-01-02        1\n",
       "2             3418.0  2015-01-03        1\n",
       "3             3968.0  2015-01-04        1\n",
       "4             3986.0  2015-01-05        1"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看训练数据\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:01:42.917676Z",
     "start_time": "2019-10-04T05:01:42.840850Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 929106 entries, 0 to 43619\n",
      "Data columns (total 3 columns):\n",
      "power_consumption    929106 non-null float64\n",
      "record_date          929106 non-null object\n",
      "user_id              929106 non-null int64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 28.4+ MB\n"
     ]
    }
   ],
   "source": [
    "train_df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据 EDA\n",
    "\n",
    "通过数据透视、统计、可视化来探索数据规律"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:04:53.299796Z",
     "start_time": "2019-10-04T05:04:53.132245Z"
    }
   },
   "outputs": [],
   "source": [
    "# 转换时间字段\n",
    "train_df.loc[:, 'record_date'] = pd.to_datetime(train_df['record_date'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:04:59.985123Z",
     "start_time": "2019-10-04T05:04:59.929244Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 929106 entries, 0 to 43619\n",
      "Data columns (total 3 columns):\n",
      "power_consumption    929106 non-null float64\n",
      "record_date          929106 non-null datetime64[ns]\n",
      "user_id              929106 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(1), int64(1)\n",
      "memory usage: 28.4 MB\n"
     ]
    }
   ],
   "source": [
    "train_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:05:23.269267Z",
     "start_time": "2019-10-04T05:05:22.742763Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1454"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_df['user_id'].unique())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "目标：预测未来一个月每一天整个高新区的用电量。\n",
    "所以无需精确到每个企业的用电量，我们简单对数据进行聚合尝试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:09:22.928987Z",
     "start_time": "2019-10-04T05:09:22.925506Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on method groupby in module pandas.core.generic:\n",
      "\n",
      "groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs) method of pandas.core.frame.DataFrame instance\n",
      "    Group series using mapper (dict or key function, apply given function\n",
      "    to group, return result as series) or by a series of columns.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    by : mapping, function, label, or list of labels\n",
      "        Used to determine the groups for the groupby.\n",
      "        If ``by`` is a function, it's called on each value of the object's\n",
      "        index. If a dict or Series is passed, the Series or dict VALUES\n",
      "        will be used to determine the groups (the Series' values are first\n",
      "        aligned; see ``.align()`` method). If an ndarray is passed, the\n",
      "        values are used as-is determine the groups. A label or list of\n",
      "        labels may be passed to group by the columns in ``self``. Notice\n",
      "        that a tuple is interpreted a (single) key.\n",
      "    axis : int, default 0\n",
      "    level : int, level name, or sequence of such, default None\n",
      "        If the axis is a MultiIndex (hierarchical), group by a particular\n",
      "        level or levels\n",
      "    as_index : boolean, default True\n",
      "        For aggregated output, return object with group labels as the\n",
      "        index. Only relevant for DataFrame input. as_index=False is\n",
      "        effectively \"SQL-style\" grouped output\n",
      "    sort : boolean, default True\n",
      "        Sort group keys. Get better performance by turning this off.\n",
      "        Note this does not influence the order of observations within each\n",
      "        group.  groupby preserves the order of rows within each group.\n",
      "    group_keys : boolean, default True\n",
      "        When calling apply, add group keys to index to identify pieces\n",
      "    squeeze : boolean, default False\n",
      "        reduce the dimensionality of the return type if possible,\n",
      "        otherwise return a consistent type\n",
      "    observed : boolean, default False\n",
      "        This only applies if any of the groupers are Categoricals\n",
      "        If True: only show observed values for categorical groupers.\n",
      "        If False: show all values for categorical groupers.\n",
      "    \n",
      "        .. versionadded:: 0.23.0\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    GroupBy object\n",
      "    \n",
      "    Examples\n",
      "    --------\n",
      "    DataFrame results\n",
      "    \n",
      "    >>> data.groupby(func, axis=0).mean()\n",
      "    >>> data.groupby(['col1', 'col2'])['col3'].mean()\n",
      "    \n",
      "    DataFrame with hierarchical index\n",
      "    \n",
      "    >>> data.groupby(['col1', 'col2']).mean()\n",
      "    \n",
      "    Notes\n",
      "    -----\n",
      "    See the `user guide\n",
      "    <http://pandas.pydata.org/pandas-docs/stable/groupby.html>`_ for more.\n",
      "    \n",
      "    See also\n",
      "    --------\n",
      "    resample : Convenience method for frequency conversion and resampling\n",
      "        of time series.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(train_df.groupby)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:10:08.475353Z",
     "start_time": "2019-10-04T05:10:08.385801Z"
    }
   },
   "outputs": [],
   "source": [
    "train_df = train_df[['record_date', 'power_consumption']].groupby('record_date',as_index=False).agg('sum')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:10:14.546014Z",
     "start_time": "2019-10-04T05:10:14.539013Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2015-01-01          2900575.0\n",
       "1  2015-01-02          3158211.0\n",
       "2  2015-01-03          3596487.0\n",
       "3  2015-01-04          3939672.0\n",
       "4  2015-01-05          4101790.0"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:12:17.297878Z",
     "start_time": "2019-10-04T05:12:16.508711Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c4ed091ef0>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_df['power_consumption'].plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:14:20.654860Z",
     "start_time": "2019-10-04T05:14:20.534851Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c4ecba37f0>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_df[(train_df['record_date'] >= '2015-09-01') & (train_df['record_date']<='2015-10-31')]['power_consumption'].plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:15:41.240061Z",
     "start_time": "2019-10-04T05:15:41.236073Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function set_index in module pandas.core.frame:\n",
      "\n",
      "set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)\n",
      "    Set the DataFrame index (row labels) using one or more existing\n",
      "    columns. By default yields a new object.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    keys : column label or list of column labels / arrays\n",
      "    drop : boolean, default True\n",
      "        Delete columns to be used as the new index\n",
      "    append : boolean, default False\n",
      "        Whether to append columns to existing index\n",
      "    inplace : boolean, default False\n",
      "        Modify the DataFrame in place (do not create a new object)\n",
      "    verify_integrity : boolean, default False\n",
      "        Check the new index for duplicates. Otherwise defer the check until\n",
      "        necessary. Setting to False will improve the performance of this\n",
      "        method\n",
      "    \n",
      "    Examples\n",
      "    --------\n",
      "    >>> df = pd.DataFrame({'month': [1, 4, 7, 10],\n",
      "    ...                    'year': [2012, 2014, 2013, 2014],\n",
      "    ...                    'sale':[55, 40, 84, 31]})\n",
      "       month  sale  year\n",
      "    0  1      55    2012\n",
      "    1  4      40    2014\n",
      "    2  7      84    2013\n",
      "    3  10     31    2014\n",
      "    \n",
      "    Set the index to become the 'month' column:\n",
      "    \n",
      "    >>> df.set_index('month')\n",
      "           sale  year\n",
      "    month\n",
      "    1      55    2012\n",
      "    4      40    2014\n",
      "    7      84    2013\n",
      "    10     31    2014\n",
      "    \n",
      "    Create a multi-index using columns 'year' and 'month':\n",
      "    \n",
      "    >>> df.set_index(['year', 'month'])\n",
      "                sale\n",
      "    year  month\n",
      "    2012  1     55\n",
      "    2014  4     40\n",
      "    2013  7     84\n",
      "    2014  10    31\n",
      "    \n",
      "    Create a multi-index using a set of values and a column:\n",
      "    \n",
      "    >>> df.set_index([[1, 2, 3, 4], 'year'])\n",
      "             month  sale\n",
      "       year\n",
      "    1  2012  1      55\n",
      "    2  2014  4      40\n",
      "    3  2013  7      84\n",
      "    4  2014  10     31\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    dataframe : DataFrame\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(pd.DataFrame.set_index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:18:14.153044Z",
     "start_time": "2019-10-04T05:18:14.147030Z"
    }
   },
   "outputs": [],
   "source": [
    "# 将日期作为横坐标\n",
    "tmp_df = train_df[(train_df['record_date'] >= '2015-09-01') & (train_df['record_date']<='2015-10-31')].copy()\n",
    "tmp_df = tmp_df.set_index('record_date')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:18:21.214450Z",
     "start_time": "2019-10-04T05:18:21.208466Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>record_date</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015-09-01</th>\n",
       "      <td>4066668.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-09-02</th>\n",
       "      <td>3925296.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-09-03</th>\n",
       "      <td>3177593.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-09-04</th>\n",
       "      <td>3566662.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-09-05</th>\n",
       "      <td>3757287.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             power_consumption\n",
       "record_date                   \n",
       "2015-09-01           4066668.0\n",
       "2015-09-02           3925296.0\n",
       "2015-09-03           3177593.0\n",
       "2015-09-04           3566662.0\n",
       "2015-09-05           3757287.0"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tmp_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:18:55.421757Z",
     "start_time": "2019-10-04T05:18:55.195717Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c4ecf1cf28>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAEuCAYAAABLSP/KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXd4XNWduP+e6epdtlzliisuGGxwMGCaCSQmCWSdQiCbLNmEVJZs4Lf7DU9ISNkUkiXAbhJCC0tJNgEnMWENNqEYbMtYbhjbki1Lsqw2oy7NjGbm/P6Ye8cjaUbTi+XzPs88nnvuuedejWfu5366kFKiUCgUCkUiGDJ9AQqFQqE4+1HCRKFQKBQJo4SJQqFQKBJGCROFQqFQJIwSJgqFQqFIGCVMFAqFQpEwSpgoFAqFImGUMFEoFApFwihholAoFIqEUcJEoVAoFAljyvQFpIvy8nJZXV2d6ctQKBSKs4o9e/Z0SikrIs07Z4RJdXU1NTU1mb4MhUKhOKsQQpyMZp4ycykUCoUiYZQwUSgUCkXCKGGiUCgUioQ5Z3wmCoUChoeHaW5uxul0ZvpSFFmGzWZj2rRpmM3muI5XwkShOIdobm6moKCA6upqhBCZvhxFliClxG6309zczKxZs+JaQ5m5FIpzCKfTSVlZmRIkihEIISgrK0tIY1XCRKFIIx19Lny+zLbKVoJEEYpEvxdKmCgUaaJ70M0HfrSNvx1qzfSlKBRJJ2phIoQwCiH2CiH+om0/LoQ4IYSo1V7LtXEhhPhPIUSdEGK/EGJl0Bq3CiGOaa9bg8YvEEIc0I75T6GJSCFEqRBiqzZ/qxCiJNI5FIpspaXbicvjo61XOb8V8dPd3c3DDz8c2G5paeGmm27K4BX5iUUz+RpweNTYN6WUy7VXrTZ2HTBPe90OPAJ+wQDcC6wGLgLu1YWDNuf2oOM2aON3A69KKecBr2rbYc+hUGQz9gEXAG6PL8NXcu7h8XgyfQlJY7QwmTJlCn/4wx8yeEV+oormEkJMA64H7gfujDB9I/CklFIC7wghioUQVcDlwFYppUNbcyuwQQjxGlAopXxbG38SuBF4SVvrcm3dJ4DXgG+FO4eU8nQ0f49CkQkcA24ge4TJd/58iPdaepO65qIphdz7ocXjzmloaGDDhg2sXr2avXv3Mn/+fJ588knefvtt7rrrLjweDxdeeCGPPPII+/bt44c//CF//OMfefHFF9m0aRM9PT34fD4WLVrE8ePHqa+v54477qCjo4Pc3Fx+/etfs2DBAm677TZKS0vZu3cvK1eu5Kc//emYa+nv7+crX/kKNTU1CCG49957+djHPsYzzzzD97//faSUXH/99fzoRz8CID8/n6997Wv85S9/IScnhxdffJFJkybx+9//nu985zsYjUaKiop4/fXXefzxx6mpqeGXv/wlADfccAN33XUXl19+Ofn5+dxxxx288sorlJSU8P3vf59//dd/pbGxkZ///Od8+MMf5vHHH+dPf/oTLpeLEydO8MlPfpJ7772Xu+++m/r6epYvX87VV1/NHXfcwQ033MDBgwdxOp188YtfpKamBpPJxM9+9jOuuOIKHn/8cTZv3szg4CD19fV85CMf4T/+4z+S+n8frWbyc+BfgdG/gvs1M9MDQgirNjYVaAqa06yNjTfeHGIcYJIuILR/KyOcQ6HIWjr7/cJk2JsdwiSTHDlyhNtvv539+/dTWFjIz372M2677Taee+45Dhw4gMfj4ZFHHmHlypXs3bsXgDfeeIMlS5awe/dudu7cyerVqwG4/fbbefDBB9mzZw8/+clP+NKXvhQ4z9GjR3nllVdCChKA7373uxQVFXHgwAH279/P+vXraWlp4Vvf+hbbtm2jtraW3bt388ILLwAwMDDAmjVr2LdvH+vWrePXv/41APfddx8vv/wy+/btY/PmzRH//oGBAS6//HL27NlDQUEB//7v/87WrVv505/+xLe//e3AvF27dvH0009TW1vL73//e2pqavjhD3/InDlzqK2t5cc//vGIdR966CEADhw4wDPPPMOtt94aiNCqra0NfL7PPfccTU1NJJOImokQ4gagXUq5RwhxedCue4BWwAL8Cr/GcB8QKiRAxjE+7mVFc4wQ4nb8ZjBmzJgRYUmFIrXY+/1mLleWCJNIGkQqmT59OmvXrgXg05/+NN/97neZNWsW8+fPB+DWW2/loYce4utf/zpz587l8OHD7Nq1izvvvJPXX38dr9fLpZdeSn9/Pzt27ODmm28OrO1yuQLvb775ZoxGY9jreOWVV3j22WcD2yUlJbz++utcfvnlVFT4C+V+6lOf4vXXX+fGG2/EYrFwww03AHDBBRewdetWANauXcttt93Gxz/+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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tmp_df.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到在十一假期左右用电量变低"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 添加测试数据，并拼接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:20:44.551492Z",
     "start_time": "2019-10-04T05:20:44.544540Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>634</th>\n",
       "      <td>2016-09-26</td>\n",
       "      <td>4042132.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>635</th>\n",
       "      <td>2016-09-27</td>\n",
       "      <td>4287965.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>636</th>\n",
       "      <td>2016-09-28</td>\n",
       "      <td>4086998.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>637</th>\n",
       "      <td>2016-09-29</td>\n",
       "      <td>3941842.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>638</th>\n",
       "      <td>2016-09-30</td>\n",
       "      <td>3783264.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    record_date  power_consumption\n",
       "634  2016-09-26          4042132.0\n",
       "635  2016-09-27          4287965.0\n",
       "636  2016-09-28          4086998.0\n",
       "637  2016-09-29          3941842.0\n",
       "638  2016-09-30          3783264.0"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:44.329399Z",
     "start_time": "2019-10-04T05:46:44.326406Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df = pd.date_range('2016-10-01', periods=31, freq='D')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:44.691833Z",
     "start_time": "2019-10-04T05:46:44.687844Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df = pd.DataFrame(test_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:45.074320Z",
     "start_time": "2019-10-04T05:46:45.068336Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-10-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-10-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-10-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-10-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-10-05</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           0\n",
       "0 2016-10-01\n",
       "1 2016-10-02\n",
       "2 2016-10-03\n",
       "3 2016-10-04\n",
       "4 2016-10-05"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:45.927823Z",
     "start_time": "2019-10-04T05:46:45.924831Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df.columns = ['record_date']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:46.289847Z",
     "start_time": "2019-10-04T05:46:46.285887Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df.loc[:, 'power_consumption'] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:46.761081Z",
     "start_time": "2019-10-04T05:46:46.755097Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-10-02</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-10-03</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-10-04</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-10-05</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2016-10-01                  0\n",
       "1  2016-10-02                  0\n",
       "2  2016-10-03                  0\n",
       "3  2016-10-04                  0\n",
       "4  2016-10-05                  0"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:47.932073Z",
     "start_time": "2019-10-04T05:46:47.925627Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2015-01-01          2900575.0\n",
       "1  2015-01-02          3158211.0\n",
       "2  2015-01-03          3596487.0\n",
       "3  2015-01-04          3939672.0\n",
       "4  2015-01-05          4101790.0"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:49.942900Z",
     "start_time": "2019-10-04T05:46:49.938909Z"
    }
   },
   "outputs": [],
   "source": [
    "total_df = pd.concat([train_df, test_df], axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:46:51.821965Z",
     "start_time": "2019-10-04T05:46:51.815432Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2016-10-27</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>2016-10-28</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>2016-10-29</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>2016-10-30</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>2016-10-31</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   record_date  power_consumption\n",
       "26  2016-10-27                0.0\n",
       "27  2016-10-28                0.0\n",
       "28  2016-10-29                0.0\n",
       "29  2016-10-30                0.0\n",
       "30  2016-10-31                0.0"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征工程\n",
    "\n",
    "思考企业用电量可能会和哪些因素有关系。\n",
    "- 星期几\n",
    "- 一个月当中的第几天（月初还是月末）\n",
    "- 一年当中的第几天（季节信息）\n",
    "- 一年当中的第几个月（季节）、哪一年"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:49:21.923989Z",
     "start_time": "2019-10-04T05:49:21.920997Z"
    }
   },
   "outputs": [],
   "source": [
    "tmp = total_df['record_date']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:52:26.021628Z",
     "start_time": "2019-10-04T05:52:26.008099Z"
    }
   },
   "outputs": [],
   "source": [
    "total_df.loc[:, 'dow'] = total_df['record_date'].apply(lambda x:x.dayofweek)\n",
    "total_df.loc[:, 'dom'] = total_df['record_date'].apply(lambda x:x.day)\n",
    "total_df.loc[:, 'month'] = total_df['record_date'].apply(lambda x:x.month)\n",
    "total_df.loc[:, 'year'] = total_df['record_date'].apply(lambda x:x.year)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:52:32.321785Z",
     "start_time": "2019-10-04T05:52:32.313835Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>dow</th>\n",
       "      <th>dom</th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  dow  dom  month  year\n",
       "0  2015-01-01          2900575.0    3    1      1  2015\n",
       "1  2015-01-02          3158211.0    4    2      1  2015\n",
       "2  2015-01-03          3596487.0    5    3      1  2015\n",
       "3  2015-01-04          3939672.0    6    4      1  2015\n",
       "4  2015-01-05          4101790.0    0    5      1  2015"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 周末特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:53:12.882861Z",
     "start_time": "2019-10-04T05:53:12.875851Z"
    }
   },
   "outputs": [],
   "source": [
    "total_df.loc[:, 'weekend'] = 0\n",
    "total_df.loc[:, 'weekend_sat'] = 0\n",
    "total_df.loc[:, 'weekend_sun'] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:53:16.200131Z",
     "start_time": "2019-10-04T05:53:16.190567Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>dow</th>\n",
       "      <th>dom</th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  dow  dom  month  year  weekend  weekend_sat  \\\n",
       "0  2015-01-01          2900575.0    3    1      1  2015        0            0   \n",
       "1  2015-01-02          3158211.0    4    2      1  2015        0            0   \n",
       "2  2015-01-03          3596487.0    5    3      1  2015        0            0   \n",
       "3  2015-01-04          3939672.0    6    4      1  2015        0            0   \n",
       "4  2015-01-05          4101790.0    0    5      1  2015        0            0   \n",
       "\n",
       "   weekend_sun  \n",
       "0            0  \n",
       "1            0  \n",
       "2            0  \n",
       "3            0  \n",
       "4            0  "
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:53:57.454295Z",
     "start_time": "2019-10-04T05:53:57.447285Z"
    }
   },
   "outputs": [],
   "source": [
    "total_df.loc[(total_df['dow'] == 5), 'weekend_sat'] = 1\n",
    "total_df.loc[(total_df['dow'] == 6), 'weekend_sun'] = 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加一个月4周的信息\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:56:04.523455Z",
     "start_time": "2019-10-04T05:56:04.517442Z"
    }
   },
   "outputs": [],
   "source": [
    "def week_of_month(day):\n",
    "    if day in range(1, 8):\n",
    "        return 1\n",
    "    if day in range(8, 15):\n",
    "        return 2\n",
    "    if day in range(15, 22):\n",
    "        return 3\n",
    "    else:\n",
    "        return 4\n",
    "total_df.loc[:, 'week_of_month'] = total_df['dom'].apply(lambda x:week_of_month(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:56:09.689854Z",
     "start_time": "2019-10-04T05:56:09.680917Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>dow</th>\n",
       "      <th>dom</th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "      <th>week_of_month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  dow  dom  month  year  weekend  weekend_sat  \\\n",
       "0  2015-01-01          2900575.0    3    1      1  2015        0            0   \n",
       "1  2015-01-02          3158211.0    4    2      1  2015        0            0   \n",
       "2  2015-01-03          3596487.0    5    3      1  2015        0            1   \n",
       "3  2015-01-04          3939672.0    6    4      1  2015        0            0   \n",
       "4  2015-01-05          4101790.0    0    5      1  2015        0            0   \n",
       "\n",
       "   weekend_sun  week_of_month  \n",
       "0            0              1  \n",
       "1            0              1  \n",
       "2            0              1  \n",
       "3            1              1  \n",
       "4            0              1  "
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加中下旬\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:57:17.325607Z",
     "start_time": "2019-10-04T05:57:17.319623Z"
    }
   },
   "outputs": [],
   "source": [
    "def period_of_month(day):\n",
    "    if day in range(1, 11):\n",
    "        return 1\n",
    "    if day in range(11, 21):\n",
    "        return 2\n",
    "    else:\n",
    "        return 3\n",
    "total_df.loc[:, 'period_of_month'] = total_df['dom'].apply(lambda x:period_of_month(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加上半月和下半月"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:57:49.426762Z",
     "start_time": "2019-10-04T05:57:49.420811Z"
    }
   },
   "outputs": [],
   "source": [
    "def period2_of_month(day):\n",
    "    if day in range(1, 16):\n",
    "        return 1\n",
    "    else:\n",
    "        return 2\n",
    "total_df.loc[:, 'period2_of_month'] = total_df['dom'].apply(lambda x:period2_of_month(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:57:58.497741Z",
     "start_time": "2019-10-04T05:57:58.488248Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>dow</th>\n",
       "      <th>dom</th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "      <th>week_of_month</th>\n",
       "      <th>period_of_month</th>\n",
       "      <th>period2_of_month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  dow  dom  month  year  weekend  weekend_sat  \\\n",
       "0  2015-01-01          2900575.0    3    1      1  2015        0            0   \n",
       "1  2015-01-02          3158211.0    4    2      1  2015        0            0   \n",
       "2  2015-01-03          3596487.0    5    3      1  2015        0            1   \n",
       "3  2015-01-04          3939672.0    6    4      1  2015        0            0   \n",
       "4  2015-01-05          4101790.0    0    5      1  2015        0            0   \n",
       "\n",
       "   weekend_sun  week_of_month  period_of_month  period2_of_month  \n",
       "0            0              1                1                 1  \n",
       "1            0              1                1                 1  \n",
       "2            0              1                1                 1  \n",
       "3            1              1                1                 1  \n",
       "4            0              1                1                 1  "
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 填充法定节假日\n",
    "\n",
    "可以使用以下 python 库\n",
    "\n",
    "- workalendar\n",
    "- chinesecalendar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T05:58:43.040882Z",
     "start_time": "2019-10-04T05:58:43.035926Z"
    }
   },
   "outputs": [],
   "source": [
    "total_df.loc[:, 'festival'] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:14:55.022655Z",
     "start_time": "2019-10-04T06:14:55.015683Z"
    }
   },
   "outputs": [],
   "source": [
    "# 简单使用十一假期作为节日\n",
    "total_df.loc[(total_df.month==10)&(total_df.dom<8), 'festival']=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:15:01.973402Z",
     "start_time": "2019-10-04T06:15:01.963457Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>dow</th>\n",
       "      <th>dom</th>\n",
       "      <th>month</th>\n",
       "      <th>year</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "      <th>week_of_month</th>\n",
       "      <th>period_of_month</th>\n",
       "      <th>period2_of_month</th>\n",
       "      <th>festival</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  dow  dom  month  year  weekend  weekend_sat  \\\n",
       "0  2015-01-01          2900575.0    3    1      1  2015        0            0   \n",
       "1  2015-01-02          3158211.0    4    2      1  2015        0            0   \n",
       "2  2015-01-03          3596487.0    5    3      1  2015        0            1   \n",
       "3  2015-01-04          3939672.0    6    4      1  2015        0            0   \n",
       "4  2015-01-05          4101790.0    0    5      1  2015        0            0   \n",
       "\n",
       "   weekend_sun  week_of_month  period_of_month  period2_of_month  festival  \n",
       "0            0              1                1                 1         0  \n",
       "1            0              1                1                 1         0  \n",
       "2            0              1                1                 1         0  \n",
       "3            1              1                1                 1         0  \n",
       "4            0              1                1                 1         0  "
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:15:12.116139Z",
     "start_time": "2019-10-04T06:15:12.108161Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 670 entries, 0 to 30\n",
      "Data columns (total 13 columns):\n",
      "record_date          670 non-null datetime64[ns]\n",
      "power_consumption    670 non-null float64\n",
      "dow                  670 non-null int64\n",
      "dom                  670 non-null int64\n",
      "month                670 non-null int64\n",
      "year                 670 non-null int64\n",
      "weekend              670 non-null int64\n",
      "weekend_sat          670 non-null int64\n",
      "weekend_sun          670 non-null int64\n",
      "week_of_month        670 non-null int64\n",
      "period_of_month      670 non-null int64\n",
      "period2_of_month     670 non-null int64\n",
      "festival             670 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(1), int64(11)\n",
      "memory usage: 73.3 KB\n"
     ]
    }
   ],
   "source": [
    "total_df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练与预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### One-hot 编码\n",
    "\n",
    "线性模型：WX+b ， 需要对类别变量进行独热向量编码， 如果不编码则类别数据有数值含义（数值大的类别权重变大，不合理）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:28:30.049007Z",
     "start_time": "2019-10-04T06:28:30.044051Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['record_date', 'power_consumption', 'dow', 'dom', 'month', 'year',\n",
       "       'weekend', 'weekend_sat', 'weekend_sun', 'week_of_month',\n",
       "       'period_of_month', 'period2_of_month', 'festival'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:29:18.848430Z",
     "start_time": "2019-10-04T06:29:18.845438Z"
    }
   },
   "outputs": [],
   "source": [
    "var_to_encoding = [ 'dow', 'dom', 'month', 'year','week_of_month','period_of_month', 'period2_of_month',]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:29:42.649934Z",
     "start_time": "2019-10-04T06:29:42.615056Z"
    }
   },
   "outputs": [],
   "source": [
    "dummy_df = pd.get_dummies(total_df, columns=var_to_encoding)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T06:29:46.421834Z",
     "start_time": "2019-10-04T06:29:46.407590Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "      <th>festival</th>\n",
       "      <th>dow_0</th>\n",
       "      <th>dow_1</th>\n",
       "      <th>dow_2</th>\n",
       "      <th>dow_3</th>\n",
       "      <th>...</th>\n",
       "      <th>year_2016</th>\n",
       "      <th>week_of_month_1</th>\n",
       "      <th>week_of_month_2</th>\n",
       "      <th>week_of_month_3</th>\n",
       "      <th>week_of_month_4</th>\n",
       "      <th>period_of_month_1</th>\n",
       "      <th>period_of_month_2</th>\n",
       "      <th>period_of_month_3</th>\n",
       "      <th>period2_of_month_1</th>\n",
       "      <th>period2_of_month_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 67 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  weekend  weekend_sat  weekend_sun  festival  \\\n",
       "0  2015-01-01          2900575.0        0            0            0         0   \n",
       "1  2015-01-02          3158211.0        0            0            0         0   \n",
       "2  2015-01-03          3596487.0        0            1            0         0   \n",
       "3  2015-01-04          3939672.0        0            0            1         0   \n",
       "4  2015-01-05          4101790.0        0            0            0         0   \n",
       "\n",
       "   dow_0  dow_1  dow_2  dow_3         ...          year_2016  week_of_month_1  \\\n",
       "0      0      0      0      1         ...                  0                1   \n",
       "1      0      0      0      0         ...                  0                1   \n",
       "2      0      0      0      0         ...                  0                1   \n",
       "3      0      0      0      0         ...                  0                1   \n",
       "4      1      0      0      0         ...                  0                1   \n",
       "\n",
       "   week_of_month_2  week_of_month_3  week_of_month_4  period_of_month_1  \\\n",
       "0                0                0                0                  1   \n",
       "1                0                0                0                  1   \n",
       "2                0                0                0                  1   \n",
       "3                0                0                0                  1   \n",
       "4                0                0                0                  1   \n",
       "\n",
       "   period_of_month_2  period_of_month_3  period2_of_month_1  \\\n",
       "0                  0                  0                   1   \n",
       "1                  0                  0                   1   \n",
       "2                  0                  0                   1   \n",
       "3                  0                  0                   1   \n",
       "4                  0                  0                   1   \n",
       "\n",
       "   period2_of_month_2  \n",
       "0                   0  \n",
       "1                   0  \n",
       "2                   0  \n",
       "3                   0  \n",
       "4                   0  \n",
       "\n",
       "[5 rows x 67 columns]"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dummy_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:32:12.742707Z",
     "start_time": "2019-10-04T07:32:12.732734Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['record_date', 'power_consumption', 'weekend', 'weekend_sat',\n",
       "       'weekend_sun', 'festival', 'dow_0', 'dow_1', 'dow_2', 'dow_3', 'dow_4',\n",
       "       'dow_5', 'dow_6', 'dom_1', 'dom_2', 'dom_3', 'dom_4', 'dom_5', 'dom_6',\n",
       "       'dom_7', 'dom_8', 'dom_9', 'dom_10', 'dom_11', 'dom_12', 'dom_13',\n",
       "       'dom_14', 'dom_15', 'dom_16', 'dom_17', 'dom_18', 'dom_19', 'dom_20',\n",
       "       'dom_21', 'dom_22', 'dom_23', 'dom_24', 'dom_25', 'dom_26', 'dom_27',\n",
       "       'dom_28', 'dom_29', 'dom_30', 'dom_31', 'month_1', 'month_2', 'month_3',\n",
       "       'month_4', 'month_5', 'month_6', 'month_7', 'month_8', 'month_9',\n",
       "       'month_10', 'month_11', 'month_12', 'year_2015', 'year_2016',\n",
       "       'week_of_month_1', 'week_of_month_2', 'week_of_month_3',\n",
       "       'week_of_month_4', 'period_of_month_1', 'period_of_month_2',\n",
       "       'period_of_month_3', 'period2_of_month_1', 'period2_of_month_2'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dummy_df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分离训练集与测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:34:15.375313Z",
     "start_time": "2019-10-04T07:34:15.365634Z"
    }
   },
   "outputs": [],
   "source": [
    "train_X = dummy_df[dummy_df.record_date < '2016-10-01']\n",
    "train_y = dummy_df[dummy_df.record_date < '2016-10-01']['power_consumption']\n",
    "test_X = dummy_df[dummy_df.record_date >= '2016-10-01']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:34:18.686055Z",
     "start_time": "2019-10-04T07:34:18.670099Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "      <th>weekend</th>\n",
       "      <th>weekend_sat</th>\n",
       "      <th>weekend_sun</th>\n",
       "      <th>festival</th>\n",
       "      <th>dow_0</th>\n",
       "      <th>dow_1</th>\n",
       "      <th>dow_2</th>\n",
       "      <th>dow_3</th>\n",
       "      <th>...</th>\n",
       "      <th>year_2016</th>\n",
       "      <th>week_of_month_1</th>\n",
       "      <th>week_of_month_2</th>\n",
       "      <th>week_of_month_3</th>\n",
       "      <th>week_of_month_4</th>\n",
       "      <th>period_of_month_1</th>\n",
       "      <th>period_of_month_2</th>\n",
       "      <th>period_of_month_3</th>\n",
       "      <th>period2_of_month_1</th>\n",
       "      <th>period2_of_month_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>2900575.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>3158211.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>3596487.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>3939672.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>4101790.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 67 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption  weekend  weekend_sat  weekend_sun  festival  \\\n",
       "0  2015-01-01          2900575.0        0            0            0         0   \n",
       "1  2015-01-02          3158211.0        0            0            0         0   \n",
       "2  2015-01-03          3596487.0        0            1            0         0   \n",
       "3  2015-01-04          3939672.0        0            0            1         0   \n",
       "4  2015-01-05          4101790.0        0            0            0         0   \n",
       "\n",
       "   dow_0  dow_1  dow_2  dow_3         ...          year_2016  week_of_month_1  \\\n",
       "0      0      0      0      1         ...                  0                1   \n",
       "1      0      0      0      0         ...                  0                1   \n",
       "2      0      0      0      0         ...                  0                1   \n",
       "3      0      0      0      0         ...                  0                1   \n",
       "4      1      0      0      0         ...                  0                1   \n",
       "\n",
       "   week_of_month_2  week_of_month_3  week_of_month_4  period_of_month_1  \\\n",
       "0                0                0                0                  1   \n",
       "1                0                0                0                  1   \n",
       "2                0                0                0                  1   \n",
       "3                0                0                0                  1   \n",
       "4                0                0                0                  1   \n",
       "\n",
       "   period_of_month_2  period_of_month_3  period2_of_month_1  \\\n",
       "0                  0                  0                   1   \n",
       "1                  0                  0                   1   \n",
       "2                  0                  0                   1   \n",
       "3                  0                  0                   1   \n",
       "4                  0                  0                   1   \n",
       "\n",
       "   period2_of_month_2  \n",
       "0                   0  \n",
       "1                   0  \n",
       "2                   0  \n",
       "3                   0  \n",
       "4                   0  \n",
       "\n",
       "[5 rows x 67 columns]"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:35:03.667741Z",
     "start_time": "2019-10-04T07:35:03.662756Z"
    }
   },
   "outputs": [],
   "source": [
    "drop_columns = ['record_date', 'power_consumption']\n",
    "train_X = train_X.drop(drop_columns, axis=1)\n",
    "test_X = test_X.drop(drop_columns, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:35:07.750709Z",
     "start_time": "2019-10-04T07:35:07.745756Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['weekend', 'weekend_sat', 'weekend_sun', 'festival', 'dow_0', 'dow_1',\n",
       "       'dow_2', 'dow_3', 'dow_4', 'dow_5', 'dow_6', 'dom_1', 'dom_2', 'dom_3',\n",
       "       'dom_4', 'dom_5', 'dom_6', 'dom_7', 'dom_8', 'dom_9', 'dom_10',\n",
       "       'dom_11', 'dom_12', 'dom_13', 'dom_14', 'dom_15', 'dom_16', 'dom_17',\n",
       "       'dom_18', 'dom_19', 'dom_20', 'dom_21', 'dom_22', 'dom_23', 'dom_24',\n",
       "       'dom_25', 'dom_26', 'dom_27', 'dom_28', 'dom_29', 'dom_30', 'dom_31',\n",
       "       'month_1', 'month_2', 'month_3', 'month_4', 'month_5', 'month_6',\n",
       "       'month_7', 'month_8', 'month_9', 'month_10', 'month_11', 'month_12',\n",
       "       'year_2015', 'year_2016', 'week_of_month_1', 'week_of_month_2',\n",
       "       'week_of_month_3', 'week_of_month_4', 'period_of_month_1',\n",
       "       'period_of_month_2', 'period_of_month_3', 'period2_of_month_1',\n",
       "       'period2_of_month_2'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_X.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 线性模型建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:35:59.545023Z",
     "start_time": "2019-10-04T07:35:59.542057Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import RidgeCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:36:41.779293Z",
     "start_time": "2019-10-04T07:36:41.755827Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class RidgeCV in module sklearn.linear_model.ridge:\n",
      "\n",
      "class RidgeCV(_BaseRidgeCV, sklearn.base.RegressorMixin)\n",
      " |  Ridge regression with built-in cross-validation.\n",
      " |  \n",
      " |  By default, it performs Generalized Cross-Validation, which is a form of\n",
      " |  efficient Leave-One-Out cross-validation.\n",
      " |  \n",
      " |  Read more in the :ref:`User Guide <ridge_regression>`.\n",
      " |  \n",
      " |  Parameters\n",
      " |  ----------\n",
      " |  alphas : numpy array of shape [n_alphas]\n",
      " |      Array of alpha values to try.\n",
      " |      Regularization strength; must be a positive float. Regularization\n",
      " |      improves the conditioning of the problem and reduces the variance of\n",
      " |      the estimates. Larger values specify stronger regularization.\n",
      " |      Alpha corresponds to ``C^-1`` in other linear models such as\n",
      " |      LogisticRegression or LinearSVC.\n",
      " |  \n",
      " |  fit_intercept : boolean\n",
      " |      Whether to calculate the intercept for this model. If set\n",
      " |      to false, no intercept will be used in calculations\n",
      " |      (e.g. data is expected to be already centered).\n",
      " |  \n",
      " |  normalize : boolean, optional, default False\n",
      " |      This parameter is ignored when ``fit_intercept`` is set to False.\n",
      " |      If True, the regressors X will be normalized before regression by\n",
      " |      subtracting the mean and dividing by the l2-norm.\n",
      " |      If you wish to standardize, please use\n",
      " |      :class:`sklearn.preprocessing.StandardScaler` before calling ``fit``\n",
      " |      on an estimator with ``normalize=False``.\n",
      " |  \n",
      " |  scoring : string, callable or None, optional, default: None\n",
      " |      A string (see model evaluation documentation) or\n",
      " |      a scorer callable object / function with signature\n",
      " |      ``scorer(estimator, X, y)``.\n",
      " |  \n",
      " |  cv : int, cross-validation generator or an iterable, optional\n",
      " |      Determines the cross-validation splitting strategy.\n",
      " |      Possible inputs for cv are:\n",
      " |  \n",
      " |      - None, to use the efficient Leave-One-Out cross-validation\n",
      " |      - integer, to specify the number of folds.\n",
      " |      - An object to be used as a cross-validation generator.\n",
      " |      - An iterable yielding train/test splits.\n",
      " |  \n",
      " |      For integer/None inputs, if ``y`` is binary or multiclass,\n",
      " |      :class:`sklearn.model_selection.StratifiedKFold` is used, else,\n",
      " |      :class:`sklearn.model_selection.KFold` is used.\n",
      " |  \n",
      " |      Refer :ref:`User Guide <cross_validation>` for the various\n",
      " |      cross-validation strategies that can be used here.\n",
      " |  \n",
      " |  gcv_mode : {None, 'auto', 'svd', eigen'}, optional\n",
      " |      Flag indicating which strategy to use when performing\n",
      " |      Generalized Cross-Validation. Options are::\n",
      " |  \n",
      " |          'auto' : use svd if n_samples > n_features or when X is a sparse\n",
      " |                   matrix, otherwise use eigen\n",
      " |          'svd' : force computation via singular value decomposition of X\n",
      " |                  (does not work for sparse matrices)\n",
      " |          'eigen' : force computation via eigendecomposition of X^T X\n",
      " |  \n",
      " |      The 'auto' mode is the default and is intended to pick the cheaper\n",
      " |      option of the two depending upon the shape and format of the training\n",
      " |      data.\n",
      " |  \n",
      " |  store_cv_values : boolean, default=False\n",
      " |      Flag indicating if the cross-validation values corresponding to\n",
      " |      each alpha should be stored in the `cv_values_` attribute (see\n",
      " |      below). This flag is only compatible with `cv=None` (i.e. using\n",
      " |      Generalized Cross-Validation).\n",
      " |  \n",
      " |  Attributes\n",
      " |  ----------\n",
      " |  cv_values_ : array, shape = [n_samples, n_alphas] or         shape = [n_samples, n_targets, n_alphas], optional\n",
      " |      Cross-validation values for each alpha (if `store_cv_values=True` and         `cv=None`). After `fit()` has been called, this attribute will         contain the mean squared errors (by default) or the values of the         `{loss,score}_func` function (if provided in the constructor).\n",
      " |  \n",
      " |  coef_ : array, shape = [n_features] or [n_targets, n_features]\n",
      " |      Weight vector(s).\n",
      " |  \n",
      " |  intercept_ : float | array, shape = (n_targets,)\n",
      " |      Independent term in decision function. Set to 0.0 if\n",
      " |      ``fit_intercept = False``.\n",
      " |  \n",
      " |  alpha_ : float\n",
      " |      Estimated regularization parameter.\n",
      " |  \n",
      " |  See also\n",
      " |  --------\n",
      " |  Ridge: Ridge regression\n",
      " |  RidgeClassifier: Ridge classifier\n",
      " |  RidgeClassifierCV: Ridge classifier with built-in cross validation\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      RidgeCV\n",
      " |      _BaseRidgeCV\n",
      " |      sklearn.linear_model.base.LinearModel\n",
      " |      abc.NewBase\n",
      " |      sklearn.base.BaseEstimator\n",
      " |      sklearn.base.RegressorMixin\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  __abstractmethods__ = frozenset()\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from _BaseRidgeCV:\n",
      " |  \n",
      " |  __init__(self, alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False, scoring=None, cv=None, gcv_mode=None, store_cv_values=False)\n",
      " |      Initialize self.  See help(type(self)) for accurate signature.\n",
      " |  \n",
      " |  fit(self, X, y, sample_weight=None)\n",
      " |      Fit Ridge regression model\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : array-like, shape = [n_samples, n_features]\n",
      " |          Training data\n",
      " |      \n",
      " |      y : array-like, shape = [n_samples] or [n_samples, n_targets]\n",
      " |          Target values. Will be cast to X's dtype if necessary\n",
      " |      \n",
      " |      sample_weight : float or array-like of shape [n_samples]\n",
      " |          Sample weight\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self : Returns self.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.linear_model.base.LinearModel:\n",
      " |  \n",
      " |  predict(self, X)\n",
      " |      Predict using the linear model\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix}, shape = (n_samples, n_features)\n",
      " |          Samples.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      C : array, shape = (n_samples,)\n",
      " |          Returns predicted values.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.base.BaseEstimator:\n",
      " |  \n",
      " |  __getstate__(self)\n",
      " |  \n",
      " |  __repr__(self)\n",
      " |      Return repr(self).\n",
      " |  \n",
      " |  __setstate__(self, state)\n",
      " |  \n",
      " |  get_params(self, deep=True)\n",
      " |      Get parameters for this estimator.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      deep : boolean, optional\n",
      " |          If True, will return the parameters for this estimator and\n",
      " |          contained subobjects that are estimators.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      params : mapping of string to any\n",
      " |          Parameter names mapped to their values.\n",
      " |  \n",
      " |  set_params(self, **params)\n",
      " |      Set the parameters of this estimator.\n",
      " |      \n",
      " |      The method works on simple estimators as well as on nested objects\n",
      " |      (such as pipelines). The latter have parameters of the form\n",
      " |      ``<component>__<parameter>`` so that it's possible to update each\n",
      " |      component of a nested object.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors inherited from sklearn.base.BaseEstimator:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.base.RegressorMixin:\n",
      " |  \n",
      " |  score(self, X, y, sample_weight=None)\n",
      " |      Returns the coefficient of determination R^2 of the prediction.\n",
      " |      \n",
      " |      The coefficient R^2 is defined as (1 - u/v), where u is the residual\n",
      " |      sum of squares ((y_true - y_pred) ** 2).sum() and v is the total\n",
      " |      sum of squares ((y_true - y_true.mean()) ** 2).sum().\n",
      " |      The best possible score is 1.0 and it can be negative (because the\n",
      " |      model can be arbitrarily worse). A constant model that always\n",
      " |      predicts the expected value of y, disregarding the input features,\n",
      " |      would get a R^2 score of 0.0.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : array-like, shape = (n_samples, n_features)\n",
      " |          Test samples.\n",
      " |      \n",
      " |      y : array-like, shape = (n_samples) or (n_samples, n_outputs)\n",
      " |          True values for X.\n",
      " |      \n",
      " |      sample_weight : array-like, shape = [n_samples], optional\n",
      " |          Sample weights.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      score : float\n",
      " |          R^2 of self.predict(X) wrt. y.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(RidgeCV)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:27.725697Z",
     "start_time": "2019-10-04T07:45:27.722706Z"
    }
   },
   "outputs": [],
   "source": [
    "linear_reg = RidgeCV(alphas=[0.2, 0.5, 0.8] , cv=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:28.463861Z",
     "start_time": "2019-10-04T07:45:28.362133Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RidgeCV(alphas=[0.2, 0.5, 0.8], cv=5, fit_intercept=True, gcv_mode=None,\n",
       "    normalize=False, scoring=None, store_cv_values=False)"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_reg.fit(train_X, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:29.923922Z",
     "start_time": "2019-10-04T07:45:29.915944Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5374032405793754"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_reg.score(train_X, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:30.797720Z",
     "start_time": "2019-10-04T07:45:30.793729Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_reg.alpha_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 结果预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:55.062315Z",
     "start_time": "2019-10-04T07:45:55.058297Z"
    }
   },
   "outputs": [],
   "source": [
    "predictions = linear_reg.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:45:58.416389Z",
     "start_time": "2019-10-04T07:45:58.412399Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3213328.51781106, 3124068.5746354 , 3487511.6220042 ,\n",
       "       3548707.75996138, 3482435.51454098, 3525570.8156006 ,\n",
       "       3552873.41445061, 3821518.95331755, 3646463.11564648,\n",
       "       3918337.42448317, 3962085.66693366, 3992093.14628391,\n",
       "       3969874.41064628, 3962539.46362474, 3772185.42312537,\n",
       "       3657244.51661013, 3948050.6603092 , 4010706.38542235,\n",
       "       4015612.64917626, 3916296.41353863, 3946541.07733212,\n",
       "       3893735.78072508, 3768537.3283751 , 4045130.85739528,\n",
       "       4074505.66507723, 4072977.93800545, 4073366.40420269,\n",
       "       3952260.21864903, 3956267.12478993, 3733158.34293386,\n",
       "       3912203.04204221])"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:46:06.596013Z",
     "start_time": "2019-10-04T07:46:06.589328Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-10-02</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-10-03</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-10-04</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-10-05</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2016-10-01                  0\n",
       "1  2016-10-02                  0\n",
       "2  2016-10-03                  0\n",
       "3  2016-10-04                  0\n",
       "4  2016-10-05                  0"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:46:32.048543Z",
     "start_time": "2019-10-04T07:46:32.045551Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df.loc[:, 'power_consumption'] = predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:46:38.265635Z",
     "start_time": "2019-10-04T07:46:38.257694Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>3.213329e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-10-02</td>\n",
       "      <td>3.124069e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-10-03</td>\n",
       "      <td>3.487512e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-10-04</td>\n",
       "      <td>3.548708e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-10-05</td>\n",
       "      <td>3.482436e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2016-10-01       3.213329e+06\n",
       "1  2016-10-02       3.124069e+06\n",
       "2  2016-10-03       3.487512e+06\n",
       "3  2016-10-04       3.548708e+06\n",
       "4  2016-10-05       3.482436e+06"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_df.to_csv('linear_reg.csv', index=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 树模型\n",
    "\n",
    "树模型不需要 One-hot，使用 One-hot 增加了特征维度，反而增加了树的深度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:04:32.026664Z",
     "start_time": "2019-10-04T08:04:32.017586Z"
    }
   },
   "outputs": [],
   "source": [
    "train_X = total_df[total_df.record_date < '2016-10-01']\n",
    "train_y = total_df[total_df.record_date < '2016-10-01']['power_consumption']\n",
    "test_X = total_df[total_df.record_date >= '2016-10-01']\n",
    "\n",
    "drop_columns = ['record_date', 'power_consumption']\n",
    "train_X = train_X.drop(drop_columns, axis=1)\n",
    "test_X = test_X.drop(drop_columns, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:04:34.104367Z",
     "start_time": "2019-10-04T08:04:34.101020Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['dow', 'dom', 'month', 'year', 'weekend', 'weekend_sat', 'weekend_sun',\n",
       "       'week_of_month', 'period_of_month', 'period2_of_month', 'festival'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T07:48:39.100998Z",
     "start_time": "2019-10-04T07:48:39.097008Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 网格化搜索训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:00:12.239033Z",
     "start_time": "2019-10-04T08:00:12.235042Z"
    }
   },
   "outputs": [],
   "source": [
    "# 网格化搜索的参数字典\n",
    "param_grid = {'n_estimators': [5, 10, 20, 50, 100, 200],\n",
    "             'max_depth': [3, 5, 7],\n",
    "             'max_features': [0.6, 0.7, 0.8]}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:00:22.017324Z",
     "start_time": "2019-10-04T08:00:22.014300Z"
    }
   },
   "outputs": [],
   "source": [
    "rf = RandomForestRegressor()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:12:39.222892Z",
     "start_time": "2019-10-04T08:12:39.219900Z"
    }
   },
   "outputs": [],
   "source": [
    "grid = GridSearchCV(rf, param_grid=param_grid,n_jobs=8, cv=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:12:47.487257Z",
     "start_time": "2019-10-04T08:12:39.611221Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise',\n",
       "       estimator=RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
       "           max_features='auto', max_leaf_nodes=None,\n",
       "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "           min_samples_leaf=1, min_samples_split=2,\n",
       "           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
       "           oob_score=False, random_state=None, verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=8,\n",
       "       param_grid={'n_estimators': [5, 10, 20, 50, 100, 200], 'max_depth': [3, 5, 7], 'max_features': [0.6, 0.7, 0.8]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring=None, verbose=0)"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.fit(train_X, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:12:57.390779Z",
     "start_time": "2019-10-04T08:12:57.386760Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': 3, 'max_features': 0.7, 'n_estimators': 10}"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:14:10.447481Z",
     "start_time": "2019-10-04T08:14:10.402390Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\APP\\Program\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_fit_time</th>\n",
       "      <th>std_fit_time</th>\n",
       "      <th>mean_score_time</th>\n",
       "      <th>std_score_time</th>\n",
       "      <th>param_max_depth</th>\n",
       "      <th>param_max_features</th>\n",
       "      <th>param_n_estimators</th>\n",
       "      <th>params</th>\n",
       "      <th>split0_test_score</th>\n",
       "      <th>split1_test_score</th>\n",
       "      <th>split2_test_score</th>\n",
       "      <th>mean_test_score</th>\n",
       "      <th>std_test_score</th>\n",
       "      <th>rank_test_score</th>\n",
       "      <th>split0_train_score</th>\n",
       "      <th>split1_train_score</th>\n",
       "      <th>split2_train_score</th>\n",
       "      <th>mean_train_score</th>\n",
       "      <th>std_train_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.004987</td>\n",
       "      <td>2.306877e-05</td>\n",
       "      <td>0.000332</td>\n",
       "      <td>4.701340e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.011931</td>\n",
       "      <td>-0.267017</td>\n",
       "      <td>-0.772371</td>\n",
       "      <td>-0.342486</td>\n",
       "      <td>0.324606</td>\n",
       "      <td>45</td>\n",
       "      <td>0.520696</td>\n",
       "      <td>0.468920</td>\n",
       "      <td>0.399856</td>\n",
       "      <td>0.463157</td>\n",
       "      <td>0.049501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.008296</td>\n",
       "      <td>4.813252e-04</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>2.385007e-05</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.040458</td>\n",
       "      <td>0.074414</td>\n",
       "      <td>-0.841659</td>\n",
       "      <td>-0.269234</td>\n",
       "      <td>0.407473</td>\n",
       "      <td>20</td>\n",
       "      <td>0.486739</td>\n",
       "      <td>0.455873</td>\n",
       "      <td>0.472481</td>\n",
       "      <td>0.471698</td>\n",
       "      <td>0.012613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.015948</td>\n",
       "      <td>8.028409e-04</td>\n",
       "      <td>0.001330</td>\n",
       "      <td>4.703589e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.015607</td>\n",
       "      <td>0.092408</td>\n",
       "      <td>-1.398652</td>\n",
       "      <td>-0.430212</td>\n",
       "      <td>0.685508</td>\n",
       "      <td>50</td>\n",
       "      <td>0.490447</td>\n",
       "      <td>0.465684</td>\n",
       "      <td>0.426726</td>\n",
       "      <td>0.460952</td>\n",
       "      <td>0.026228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.049201</td>\n",
       "      <td>1.318903e-02</td>\n",
       "      <td>0.002327</td>\n",
       "      <td>4.703589e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.011770</td>\n",
       "      <td>0.145918</td>\n",
       "      <td>-1.122996</td>\n",
       "      <td>-0.329616</td>\n",
       "      <td>0.564686</td>\n",
       "      <td>44</td>\n",
       "      <td>0.479520</td>\n",
       "      <td>0.501131</td>\n",
       "      <td>0.417357</td>\n",
       "      <td>0.466003</td>\n",
       "      <td>0.035511</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.133316</td>\n",
       "      <td>3.871728e-02</td>\n",
       "      <td>0.005652</td>\n",
       "      <td>3.083235e-03</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.000497</td>\n",
       "      <td>-0.021076</td>\n",
       "      <td>-1.007009</td>\n",
       "      <td>-0.342530</td>\n",
       "      <td>0.469941</td>\n",
       "      <td>46</td>\n",
       "      <td>0.501761</td>\n",
       "      <td>0.461416</td>\n",
       "      <td>0.424123</td>\n",
       "      <td>0.462433</td>\n",
       "      <td>0.031704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.267798</td>\n",
       "      <td>8.042471e-02</td>\n",
       "      <td>0.009641</td>\n",
       "      <td>3.761129e-03</td>\n",
       "      <td>3</td>\n",
       "      <td>0.6</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.009688</td>\n",
       "      <td>0.107045</td>\n",
       "      <td>-1.005147</td>\n",
       "      <td>-0.296138</td>\n",
       "      <td>0.502918</td>\n",
       "      <td>33</td>\n",
       "      <td>0.500484</td>\n",
       "      <td>0.500112</td>\n",
       "      <td>0.425391</td>\n",
       "      <td>0.475329</td>\n",
       "      <td>0.035312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.005013</td>\n",
       "      <td>3.793329e-05</td>\n",
       "      <td>0.000333</td>\n",
       "      <td>4.702464e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.031099</td>\n",
       "      <td>-0.010857</td>\n",
       "      <td>-0.590116</td>\n",
       "      <td>-0.210690</td>\n",
       "      <td>0.268421</td>\n",
       "      <td>5</td>\n",
       "      <td>0.478768</td>\n",
       "      <td>0.419545</td>\n",
       "      <td>0.417342</td>\n",
       "      <td>0.438552</td>\n",
       "      <td>0.028451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.009309</td>\n",
       "      <td>4.699093e-04</td>\n",
       "      <td>0.000997</td>\n",
       "      <td>2.973602e-07</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>0.102758</td>\n",
       "      <td>0.199143</td>\n",
       "      <td>-0.782982</td>\n",
       "      <td>-0.160360</td>\n",
       "      <td>0.442015</td>\n",
       "      <td>1</td>\n",
       "      <td>0.514256</td>\n",
       "      <td>0.546528</td>\n",
       "      <td>0.427486</td>\n",
       "      <td>0.496090</td>\n",
       "      <td>0.050268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.022606</td>\n",
       "      <td>8.033851e-03</td>\n",
       "      <td>0.001662</td>\n",
       "      <td>4.700218e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>0.049465</td>\n",
       "      <td>0.066136</td>\n",
       "      <td>-0.941634</td>\n",
       "      <td>-0.275344</td>\n",
       "      <td>0.471187</td>\n",
       "      <td>25</td>\n",
       "      <td>0.490268</td>\n",
       "      <td>0.535132</td>\n",
       "      <td>0.435292</td>\n",
       "      <td>0.486898</td>\n",
       "      <td>0.040829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.057688</td>\n",
       "      <td>2.305203e-02</td>\n",
       "      <td>0.002992</td>\n",
       "      <td>8.144907e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>0.013459</td>\n",
       "      <td>0.170270</td>\n",
       "      <td>-1.131144</td>\n",
       "      <td>-0.315805</td>\n",
       "      <td>0.580075</td>\n",
       "      <td>40</td>\n",
       "      <td>0.521178</td>\n",
       "      <td>0.549773</td>\n",
       "      <td>0.452316</td>\n",
       "      <td>0.507756</td>\n",
       "      <td>0.040903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.114197</td>\n",
       "      <td>4.867063e-02</td>\n",
       "      <td>0.004322</td>\n",
       "      <td>4.703026e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.018577</td>\n",
       "      <td>0.015026</td>\n",
       "      <td>-0.916437</td>\n",
       "      <td>-0.306663</td>\n",
       "      <td>0.431393</td>\n",
       "      <td>37</td>\n",
       "      <td>0.516314</td>\n",
       "      <td>0.483625</td>\n",
       "      <td>0.448998</td>\n",
       "      <td>0.482979</td>\n",
       "      <td>0.027485</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.293723</td>\n",
       "      <td>9.640624e-02</td>\n",
       "      <td>0.008311</td>\n",
       "      <td>4.706398e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.7</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>0.007434</td>\n",
       "      <td>0.114608</td>\n",
       "      <td>-0.955047</td>\n",
       "      <td>-0.277668</td>\n",
       "      <td>0.480973</td>\n",
       "      <td>27</td>\n",
       "      <td>0.519216</td>\n",
       "      <td>0.526067</td>\n",
       "      <td>0.442890</td>\n",
       "      <td>0.496058</td>\n",
       "      <td>0.037699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.004987</td>\n",
       "      <td>1.946680e-07</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>2.247832e-07</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>0.032646</td>\n",
       "      <td>0.129783</td>\n",
       "      <td>-0.819732</td>\n",
       "      <td>-0.219101</td>\n",
       "      <td>0.426557</td>\n",
       "      <td>7</td>\n",
       "      <td>0.529599</td>\n",
       "      <td>0.534234</td>\n",
       "      <td>0.449204</td>\n",
       "      <td>0.504345</td>\n",
       "      <td>0.039037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.007978</td>\n",
       "      <td>2.973602e-07</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>4.052337e-07</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.029561</td>\n",
       "      <td>0.101643</td>\n",
       "      <td>-0.734671</td>\n",
       "      <td>-0.220863</td>\n",
       "      <td>0.367244</td>\n",
       "      <td>9</td>\n",
       "      <td>0.506031</td>\n",
       "      <td>0.598416</td>\n",
       "      <td>0.427265</td>\n",
       "      <td>0.510571</td>\n",
       "      <td>0.069946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.016622</td>\n",
       "      <td>4.702464e-04</td>\n",
       "      <td>0.000997</td>\n",
       "      <td>1.123916e-07</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.046467</td>\n",
       "      <td>0.107217</td>\n",
       "      <td>-0.778001</td>\n",
       "      <td>-0.239083</td>\n",
       "      <td>0.386202</td>\n",
       "      <td>12</td>\n",
       "      <td>0.546914</td>\n",
       "      <td>0.523112</td>\n",
       "      <td>0.473651</td>\n",
       "      <td>0.514559</td>\n",
       "      <td>0.030515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.059011</td>\n",
       "      <td>2.810819e-02</td>\n",
       "      <td>0.002327</td>\n",
       "      <td>4.700217e-04</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.032743</td>\n",
       "      <td>0.067218</td>\n",
       "      <td>-0.950865</td>\n",
       "      <td>-0.305464</td>\n",
       "      <td>0.458189</td>\n",
       "      <td>36</td>\n",
       "      <td>0.547735</td>\n",
       "      <td>0.529724</td>\n",
       "      <td>0.466700</td>\n",
       "      <td>0.514720</td>\n",
       "      <td>0.034742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.106050</td>\n",
       "      <td>3.226960e-02</td>\n",
       "      <td>0.019614</td>\n",
       "      <td>2.209686e-02</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.016115</td>\n",
       "      <td>0.070868</td>\n",
       "      <td>-0.874191</td>\n",
       "      <td>-0.273146</td>\n",
       "      <td>0.426484</td>\n",
       "      <td>24</td>\n",
       "      <td>0.545407</td>\n",
       "      <td>0.545810</td>\n",
       "      <td>0.466337</td>\n",
       "      <td>0.519185</td>\n",
       "      <td>0.037369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.257140</td>\n",
       "      <td>1.011802e-01</td>\n",
       "      <td>0.007653</td>\n",
       "      <td>1.252075e-03</td>\n",
       "      <td>3</td>\n",
       "      <td>0.8</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 3, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.023183</td>\n",
       "      <td>0.093112</td>\n",
       "      <td>-0.871926</td>\n",
       "      <td>-0.267332</td>\n",
       "      <td>0.430140</td>\n",
       "      <td>19</td>\n",
       "      <td>0.541426</td>\n",
       "      <td>0.540428</td>\n",
       "      <td>0.471234</td>\n",
       "      <td>0.517696</td>\n",
       "      <td>0.032856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.004986</td>\n",
       "      <td>8.141987e-04</td>\n",
       "      <td>0.000665</td>\n",
       "      <td>4.702465e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.026031</td>\n",
       "      <td>0.044519</td>\n",
       "      <td>-0.871820</td>\n",
       "      <td>-0.267090</td>\n",
       "      <td>0.427675</td>\n",
       "      <td>18</td>\n",
       "      <td>0.666743</td>\n",
       "      <td>0.720206</td>\n",
       "      <td>0.590086</td>\n",
       "      <td>0.659012</td>\n",
       "      <td>0.053402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.018616</td>\n",
       "      <td>1.365861e-02</td>\n",
       "      <td>0.000665</td>\n",
       "      <td>4.701903e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.018746</td>\n",
       "      <td>0.033997</td>\n",
       "      <td>-1.252634</td>\n",
       "      <td>-0.412461</td>\n",
       "      <td>0.594482</td>\n",
       "      <td>49</td>\n",
       "      <td>0.710567</td>\n",
       "      <td>0.719128</td>\n",
       "      <td>0.636801</td>\n",
       "      <td>0.688832</td>\n",
       "      <td>0.036957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.020935</td>\n",
       "      <td>7.039479e-03</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>1.123916e-07</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.006247</td>\n",
       "      <td>0.166475</td>\n",
       "      <td>-1.262467</td>\n",
       "      <td>-0.363248</td>\n",
       "      <td>0.639200</td>\n",
       "      <td>48</td>\n",
       "      <td>0.687685</td>\n",
       "      <td>0.724144</td>\n",
       "      <td>0.632249</td>\n",
       "      <td>0.681360</td>\n",
       "      <td>0.037782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.070682</td>\n",
       "      <td>3.719766e-02</td>\n",
       "      <td>0.002163</td>\n",
       "      <td>2.384389e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.002499</td>\n",
       "      <td>0.123990</td>\n",
       "      <td>-0.976068</td>\n",
       "      <td>-0.284859</td>\n",
       "      <td>0.491479</td>\n",
       "      <td>30</td>\n",
       "      <td>0.701773</td>\n",
       "      <td>0.745345</td>\n",
       "      <td>0.622107</td>\n",
       "      <td>0.689741</td>\n",
       "      <td>0.051026</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.108716</td>\n",
       "      <td>2.984239e-02</td>\n",
       "      <td>0.003832</td>\n",
       "      <td>8.315315e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.026596</td>\n",
       "      <td>0.081269</td>\n",
       "      <td>-0.936092</td>\n",
       "      <td>-0.276076</td>\n",
       "      <td>0.467236</td>\n",
       "      <td>26</td>\n",
       "      <td>0.712475</td>\n",
       "      <td>0.732367</td>\n",
       "      <td>0.641500</td>\n",
       "      <td>0.695447</td>\n",
       "      <td>0.039001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.298614</td>\n",
       "      <td>9.396623e-02</td>\n",
       "      <td>0.008663</td>\n",
       "      <td>1.704711e-03</td>\n",
       "      <td>5</td>\n",
       "      <td>0.6</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>0.014688</td>\n",
       "      <td>0.121845</td>\n",
       "      <td>-1.003978</td>\n",
       "      <td>-0.289148</td>\n",
       "      <td>0.507350</td>\n",
       "      <td>31</td>\n",
       "      <td>0.724788</td>\n",
       "      <td>0.748583</td>\n",
       "      <td>0.654430</td>\n",
       "      <td>0.709267</td>\n",
       "      <td>0.039974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.006670</td>\n",
       "      <td>1.696355e-03</td>\n",
       "      <td>0.000665</td>\n",
       "      <td>4.701344e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.059936</td>\n",
       "      <td>-0.126986</td>\n",
       "      <td>-0.571151</td>\n",
       "      <td>-0.252691</td>\n",
       "      <td>0.226843</td>\n",
       "      <td>15</td>\n",
       "      <td>0.696360</td>\n",
       "      <td>0.641260</td>\n",
       "      <td>0.567319</td>\n",
       "      <td>0.634980</td>\n",
       "      <td>0.052867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.021333</td>\n",
       "      <td>1.674499e-02</td>\n",
       "      <td>0.000991</td>\n",
       "      <td>9.330533e-06</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>0.020886</td>\n",
       "      <td>0.074631</td>\n",
       "      <td>-1.056952</td>\n",
       "      <td>-0.320478</td>\n",
       "      <td>0.521228</td>\n",
       "      <td>42</td>\n",
       "      <td>0.718243</td>\n",
       "      <td>0.759401</td>\n",
       "      <td>0.692128</td>\n",
       "      <td>0.723257</td>\n",
       "      <td>0.027692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.024669</td>\n",
       "      <td>1.156154e-02</td>\n",
       "      <td>0.001326</td>\n",
       "      <td>4.733041e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.026264</td>\n",
       "      <td>0.083769</td>\n",
       "      <td>-0.772292</td>\n",
       "      <td>-0.238262</td>\n",
       "      <td>0.380278</td>\n",
       "      <td>11</td>\n",
       "      <td>0.733109</td>\n",
       "      <td>0.774990</td>\n",
       "      <td>0.673533</td>\n",
       "      <td>0.727211</td>\n",
       "      <td>0.041629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.066008</td>\n",
       "      <td>3.113098e-02</td>\n",
       "      <td>0.002660</td>\n",
       "      <td>4.702466e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.017823</td>\n",
       "      <td>0.096124</td>\n",
       "      <td>-1.026653</td>\n",
       "      <td>-0.316117</td>\n",
       "      <td>0.504573</td>\n",
       "      <td>41</td>\n",
       "      <td>0.742306</td>\n",
       "      <td>0.762125</td>\n",
       "      <td>0.651474</td>\n",
       "      <td>0.718635</td>\n",
       "      <td>0.048174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.174997</td>\n",
       "      <td>2.124942e-02</td>\n",
       "      <td>0.005652</td>\n",
       "      <td>2.483665e-03</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.020721</td>\n",
       "      <td>0.077207</td>\n",
       "      <td>-0.774130</td>\n",
       "      <td>-0.239215</td>\n",
       "      <td>0.380349</td>\n",
       "      <td>13</td>\n",
       "      <td>0.735461</td>\n",
       "      <td>0.765917</td>\n",
       "      <td>0.668425</td>\n",
       "      <td>0.723268</td>\n",
       "      <td>0.040724</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.201625</td>\n",
       "      <td>2.857831e-02</td>\n",
       "      <td>0.008004</td>\n",
       "      <td>3.796441e-06</td>\n",
       "      <td>5</td>\n",
       "      <td>0.7</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.015709</td>\n",
       "      <td>0.100692</td>\n",
       "      <td>-0.971696</td>\n",
       "      <td>-0.295571</td>\n",
       "      <td>0.480449</td>\n",
       "      <td>32</td>\n",
       "      <td>0.734134</td>\n",
       "      <td>0.769875</td>\n",
       "      <td>0.677368</td>\n",
       "      <td>0.727126</td>\n",
       "      <td>0.038090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>0.005326</td>\n",
       "      <td>4.646084e-04</td>\n",
       "      <td>0.000333</td>\n",
       "      <td>4.704712e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.010279</td>\n",
       "      <td>0.035184</td>\n",
       "      <td>-1.547559</td>\n",
       "      <td>-0.507551</td>\n",
       "      <td>0.735631</td>\n",
       "      <td>54</td>\n",
       "      <td>0.646393</td>\n",
       "      <td>0.719636</td>\n",
       "      <td>0.660008</td>\n",
       "      <td>0.675346</td>\n",
       "      <td>0.031807</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0.011334</td>\n",
       "      <td>1.252482e-03</td>\n",
       "      <td>0.000665</td>\n",
       "      <td>4.703026e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.026352</td>\n",
       "      <td>0.148951</td>\n",
       "      <td>-0.785199</td>\n",
       "      <td>-0.220866</td>\n",
       "      <td>0.405410</td>\n",
       "      <td>10</td>\n",
       "      <td>0.748160</td>\n",
       "      <td>0.782702</td>\n",
       "      <td>0.653067</td>\n",
       "      <td>0.727976</td>\n",
       "      <td>0.054814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>0.027669</td>\n",
       "      <td>8.003356e-03</td>\n",
       "      <td>0.001334</td>\n",
       "      <td>4.671934e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.009364</td>\n",
       "      <td>0.121444</td>\n",
       "      <td>-0.693454</td>\n",
       "      <td>-0.193791</td>\n",
       "      <td>0.357328</td>\n",
       "      <td>2</td>\n",
       "      <td>0.739697</td>\n",
       "      <td>0.766334</td>\n",
       "      <td>0.685500</td>\n",
       "      <td>0.730510</td>\n",
       "      <td>0.033633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>0.106961</td>\n",
       "      <td>3.041416e-02</td>\n",
       "      <td>0.002327</td>\n",
       "      <td>4.696845e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.016206</td>\n",
       "      <td>0.048136</td>\n",
       "      <td>-0.691690</td>\n",
       "      <td>-0.219920</td>\n",
       "      <td>0.334624</td>\n",
       "      <td>8</td>\n",
       "      <td>0.745642</td>\n",
       "      <td>0.761524</td>\n",
       "      <td>0.687324</td>\n",
       "      <td>0.731496</td>\n",
       "      <td>0.031901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>0.122626</td>\n",
       "      <td>4.628127e-02</td>\n",
       "      <td>0.003672</td>\n",
       "      <td>4.892229e-04</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.038427</td>\n",
       "      <td>0.096230</td>\n",
       "      <td>-0.670879</td>\n",
       "      <td>-0.204359</td>\n",
       "      <td>0.334429</td>\n",
       "      <td>4</td>\n",
       "      <td>0.749531</td>\n",
       "      <td>0.774115</td>\n",
       "      <td>0.695360</td>\n",
       "      <td>0.739668</td>\n",
       "      <td>0.032899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>0.355068</td>\n",
       "      <td>7.907386e-02</td>\n",
       "      <td>0.008318</td>\n",
       "      <td>1.236483e-03</td>\n",
       "      <td>5</td>\n",
       "      <td>0.8</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 5, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.024283</td>\n",
       "      <td>0.095271</td>\n",
       "      <td>-0.706264</td>\n",
       "      <td>-0.211759</td>\n",
       "      <td>0.353058</td>\n",
       "      <td>6</td>\n",
       "      <td>0.750351</td>\n",
       "      <td>0.777953</td>\n",
       "      <td>0.695620</td>\n",
       "      <td>0.741308</td>\n",
       "      <td>0.034215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>0.008828</td>\n",
       "      <td>5.045183e-03</td>\n",
       "      <td>0.000841</td>\n",
       "      <td>2.208496e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.024818</td>\n",
       "      <td>-0.054829</td>\n",
       "      <td>-0.992543</td>\n",
       "      <td>-0.357396</td>\n",
       "      <td>0.449283</td>\n",
       "      <td>47</td>\n",
       "      <td>0.824906</td>\n",
       "      <td>0.866783</td>\n",
       "      <td>0.783501</td>\n",
       "      <td>0.825063</td>\n",
       "      <td>0.034000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>0.009664</td>\n",
       "      <td>4.703608e-04</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>3.371748e-07</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.000713</td>\n",
       "      <td>0.043918</td>\n",
       "      <td>-1.557647</td>\n",
       "      <td>-0.504814</td>\n",
       "      <td>0.744688</td>\n",
       "      <td>53</td>\n",
       "      <td>0.820910</td>\n",
       "      <td>0.864903</td>\n",
       "      <td>0.828533</td>\n",
       "      <td>0.838115</td>\n",
       "      <td>0.019196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0.042658</td>\n",
       "      <td>1.811338e-02</td>\n",
       "      <td>0.001325</td>\n",
       "      <td>4.626039e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.035915</td>\n",
       "      <td>-0.003823</td>\n",
       "      <td>-0.933890</td>\n",
       "      <td>-0.324543</td>\n",
       "      <td>0.431073</td>\n",
       "      <td>43</td>\n",
       "      <td>0.844724</td>\n",
       "      <td>0.878825</td>\n",
       "      <td>0.844663</td>\n",
       "      <td>0.856071</td>\n",
       "      <td>0.016090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0.093376</td>\n",
       "      <td>2.325488e-02</td>\n",
       "      <td>0.002992</td>\n",
       "      <td>8.143934e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.027771</td>\n",
       "      <td>0.032458</td>\n",
       "      <td>-0.909352</td>\n",
       "      <td>-0.301555</td>\n",
       "      <td>0.430480</td>\n",
       "      <td>34</td>\n",
       "      <td>0.842723</td>\n",
       "      <td>0.885723</td>\n",
       "      <td>0.824942</td>\n",
       "      <td>0.851129</td>\n",
       "      <td>0.025516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>0.098472</td>\n",
       "      <td>1.732894e-02</td>\n",
       "      <td>0.003985</td>\n",
       "      <td>5.398308e-06</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.027008</td>\n",
       "      <td>0.092241</td>\n",
       "      <td>-1.002429</td>\n",
       "      <td>-0.312399</td>\n",
       "      <td>0.490348</td>\n",
       "      <td>38</td>\n",
       "      <td>0.850981</td>\n",
       "      <td>0.881053</td>\n",
       "      <td>0.813577</td>\n",
       "      <td>0.848537</td>\n",
       "      <td>0.027601</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>0.171955</td>\n",
       "      <td>7.146904e-03</td>\n",
       "      <td>0.007976</td>\n",
       "      <td>3.156203e-05</td>\n",
       "      <td>7</td>\n",
       "      <td>0.6</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.6, 'n_estim...</td>\n",
       "      <td>-0.005613</td>\n",
       "      <td>0.081911</td>\n",
       "      <td>-0.837331</td>\n",
       "      <td>-0.253678</td>\n",
       "      <td>0.414249</td>\n",
       "      <td>16</td>\n",
       "      <td>0.849060</td>\n",
       "      <td>0.891865</td>\n",
       "      <td>0.831418</td>\n",
       "      <td>0.857448</td>\n",
       "      <td>0.025380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>0.006021</td>\n",
       "      <td>1.888580e-05</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.062671</td>\n",
       "      <td>-0.036661</td>\n",
       "      <td>-0.844820</td>\n",
       "      <td>-0.314717</td>\n",
       "      <td>0.374989</td>\n",
       "      <td>39</td>\n",
       "      <td>0.839811</td>\n",
       "      <td>0.866028</td>\n",
       "      <td>0.744964</td>\n",
       "      <td>0.816934</td>\n",
       "      <td>0.052004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>0.009998</td>\n",
       "      <td>1.839930e-06</td>\n",
       "      <td>0.000998</td>\n",
       "      <td>5.150430e-07</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.004716</td>\n",
       "      <td>0.062929</td>\n",
       "      <td>-0.804379</td>\n",
       "      <td>-0.248722</td>\n",
       "      <td>0.393878</td>\n",
       "      <td>14</td>\n",
       "      <td>0.849721</td>\n",
       "      <td>0.882603</td>\n",
       "      <td>0.799870</td>\n",
       "      <td>0.844064</td>\n",
       "      <td>0.034011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>0.033670</td>\n",
       "      <td>1.935837e-02</td>\n",
       "      <td>0.001657</td>\n",
       "      <td>4.662995e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.059369</td>\n",
       "      <td>0.048052</td>\n",
       "      <td>-0.804091</td>\n",
       "      <td>-0.271803</td>\n",
       "      <td>0.378931</td>\n",
       "      <td>23</td>\n",
       "      <td>0.867989</td>\n",
       "      <td>0.882474</td>\n",
       "      <td>0.828818</td>\n",
       "      <td>0.859760</td>\n",
       "      <td>0.022664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>0.089722</td>\n",
       "      <td>2.187283e-02</td>\n",
       "      <td>0.014321</td>\n",
       "      <td>1.602210e-02</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.022717</td>\n",
       "      <td>0.040574</td>\n",
       "      <td>-0.856462</td>\n",
       "      <td>-0.279535</td>\n",
       "      <td>0.408767</td>\n",
       "      <td>29</td>\n",
       "      <td>0.855983</td>\n",
       "      <td>0.895369</td>\n",
       "      <td>0.852860</td>\n",
       "      <td>0.868071</td>\n",
       "      <td>0.019345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>0.103103</td>\n",
       "      <td>1.621773e-02</td>\n",
       "      <td>0.004671</td>\n",
       "      <td>4.817848e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.036976</td>\n",
       "      <td>0.036089</td>\n",
       "      <td>-0.904484</td>\n",
       "      <td>-0.301790</td>\n",
       "      <td>0.427211</td>\n",
       "      <td>35</td>\n",
       "      <td>0.864532</td>\n",
       "      <td>0.898912</td>\n",
       "      <td>0.844304</td>\n",
       "      <td>0.869249</td>\n",
       "      <td>0.022542</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>0.181660</td>\n",
       "      <td>4.721221e-03</td>\n",
       "      <td>0.007456</td>\n",
       "      <td>3.881487e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.7, 'n_estim...</td>\n",
       "      <td>-0.033410</td>\n",
       "      <td>0.051653</td>\n",
       "      <td>-0.827706</td>\n",
       "      <td>-0.269821</td>\n",
       "      <td>0.396010</td>\n",
       "      <td>21</td>\n",
       "      <td>0.859938</td>\n",
       "      <td>0.900367</td>\n",
       "      <td>0.855327</td>\n",
       "      <td>0.871877</td>\n",
       "      <td>0.020233</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>0.015656</td>\n",
       "      <td>1.295869e-02</td>\n",
       "      <td>0.000504</td>\n",
       "      <td>4.072318e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>5</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.120763</td>\n",
       "      <td>-0.035664</td>\n",
       "      <td>-1.196707</td>\n",
       "      <td>-0.451044</td>\n",
       "      <td>0.528406</td>\n",
       "      <td>52</td>\n",
       "      <td>0.800050</td>\n",
       "      <td>0.848855</td>\n",
       "      <td>0.830531</td>\n",
       "      <td>0.826479</td>\n",
       "      <td>0.020130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>0.023159</td>\n",
       "      <td>1.792599e-02</td>\n",
       "      <td>0.000997</td>\n",
       "      <td>2.973602e-07</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>10</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.045893</td>\n",
       "      <td>-0.135637</td>\n",
       "      <td>-1.169634</td>\n",
       "      <td>-0.450388</td>\n",
       "      <td>0.509902</td>\n",
       "      <td>51</td>\n",
       "      <td>0.854464</td>\n",
       "      <td>0.912030</td>\n",
       "      <td>0.857876</td>\n",
       "      <td>0.874790</td>\n",
       "      <td>0.026370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>0.021970</td>\n",
       "      <td>2.799675e-03</td>\n",
       "      <td>0.000997</td>\n",
       "      <td>3.893359e-07</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>20</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.062992</td>\n",
       "      <td>0.078184</td>\n",
       "      <td>-0.608761</td>\n",
       "      <td>-0.197856</td>\n",
       "      <td>0.296215</td>\n",
       "      <td>3</td>\n",
       "      <td>0.867467</td>\n",
       "      <td>0.902057</td>\n",
       "      <td>0.855226</td>\n",
       "      <td>0.874917</td>\n",
       "      <td>0.019831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>0.045926</td>\n",
       "      <td>1.870149e-03</td>\n",
       "      <td>0.002498</td>\n",
       "      <td>4.072993e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>50</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.050583</td>\n",
       "      <td>0.059973</td>\n",
       "      <td>-0.782928</td>\n",
       "      <td>-0.257846</td>\n",
       "      <td>0.374022</td>\n",
       "      <td>17</td>\n",
       "      <td>0.866989</td>\n",
       "      <td>0.916347</td>\n",
       "      <td>0.870839</td>\n",
       "      <td>0.884725</td>\n",
       "      <td>0.022415</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>0.123574</td>\n",
       "      <td>2.841749e-02</td>\n",
       "      <td>0.009179</td>\n",
       "      <td>6.963573e-03</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>100</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.070222</td>\n",
       "      <td>0.025582</td>\n",
       "      <td>-0.765882</td>\n",
       "      <td>-0.270174</td>\n",
       "      <td>0.352694</td>\n",
       "      <td>22</td>\n",
       "      <td>0.875236</td>\n",
       "      <td>0.909600</td>\n",
       "      <td>0.869157</td>\n",
       "      <td>0.884664</td>\n",
       "      <td>0.017806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>0.176349</td>\n",
       "      <td>8.617311e-04</td>\n",
       "      <td>0.007637</td>\n",
       "      <td>4.654786e-04</td>\n",
       "      <td>7</td>\n",
       "      <td>0.8</td>\n",
       "      <td>200</td>\n",
       "      <td>{'max_depth': 7, 'max_features': 0.8, 'n_estim...</td>\n",
       "      <td>-0.049229</td>\n",
       "      <td>0.046229</td>\n",
       "      <td>-0.832448</td>\n",
       "      <td>-0.278482</td>\n",
       "      <td>0.393647</td>\n",
       "      <td>28</td>\n",
       "      <td>0.871046</td>\n",
       "      <td>0.911872</td>\n",
       "      <td>0.869052</td>\n",
       "      <td>0.883990</td>\n",
       "      <td>0.019732</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    mean_fit_time  std_fit_time  mean_score_time  std_score_time  \\\n",
       "0        0.004987  2.306877e-05         0.000332    4.701340e-04   \n",
       "1        0.008296  4.813252e-04         0.000998    2.385007e-05   \n",
       "2        0.015948  8.028409e-04         0.001330    4.703589e-04   \n",
       "3        0.049201  1.318903e-02         0.002327    4.703589e-04   \n",
       "4        0.133316  3.871728e-02         0.005652    3.083235e-03   \n",
       "5        0.267798  8.042471e-02         0.009641    3.761129e-03   \n",
       "6        0.005013  3.793329e-05         0.000333    4.702464e-04   \n",
       "7        0.009309  4.699093e-04         0.000997    2.973602e-07   \n",
       "8        0.022606  8.033851e-03         0.001662    4.700218e-04   \n",
       "9        0.057688  2.305203e-02         0.002992    8.144907e-04   \n",
       "10       0.114197  4.867063e-02         0.004322    4.703026e-04   \n",
       "11       0.293723  9.640624e-02         0.008311    4.706398e-04   \n",
       "12       0.004987  1.946680e-07         0.000998    2.247832e-07   \n",
       "13       0.007978  2.973602e-07         0.000998    4.052337e-07   \n",
       "14       0.016622  4.702464e-04         0.000997    1.123916e-07   \n",
       "15       0.059011  2.810819e-02         0.002327    4.700217e-04   \n",
       "16       0.106050  3.226960e-02         0.019614    2.209686e-02   \n",
       "17       0.257140  1.011802e-01         0.007653    1.252075e-03   \n",
       "18       0.004986  8.141987e-04         0.000665    4.702465e-04   \n",
       "19       0.018616  1.365861e-02         0.000665    4.701903e-04   \n",
       "20       0.020935  7.039479e-03         0.000998    1.123916e-07   \n",
       "21       0.070682  3.719766e-02         0.002163    2.384389e-04   \n",
       "22       0.108716  2.984239e-02         0.003832    8.315315e-04   \n",
       "23       0.298614  9.396623e-02         0.008663    1.704711e-03   \n",
       "24       0.006670  1.696355e-03         0.000665    4.701344e-04   \n",
       "25       0.021333  1.674499e-02         0.000991    9.330533e-06   \n",
       "26       0.024669  1.156154e-02         0.001326    4.733041e-04   \n",
       "27       0.066008  3.113098e-02         0.002660    4.702466e-04   \n",
       "28       0.174997  2.124942e-02         0.005652    2.483665e-03   \n",
       "29       0.201625  2.857831e-02         0.008004    3.796441e-06   \n",
       "30       0.005326  4.646084e-04         0.000333    4.704712e-04   \n",
       "31       0.011334  1.252482e-03         0.000665    4.703026e-04   \n",
       "32       0.027669  8.003356e-03         0.001334    4.671934e-04   \n",
       "33       0.106961  3.041416e-02         0.002327    4.696845e-04   \n",
       "34       0.122626  4.628127e-02         0.003672    4.892229e-04   \n",
       "35       0.355068  7.907386e-02         0.008318    1.236483e-03   \n",
       "36       0.008828  5.045183e-03         0.000841    2.208496e-04   \n",
       "37       0.009664  4.703608e-04         0.000998    3.371748e-07   \n",
       "38       0.042658  1.811338e-02         0.001325    4.626039e-04   \n",
       "39       0.093376  2.325488e-02         0.002992    8.143934e-04   \n",
       "40       0.098472  1.732894e-02         0.003985    5.398308e-06   \n",
       "41       0.171955  7.146904e-03         0.007976    3.156203e-05   \n",
       "42       0.006021  1.888580e-05         0.000000    0.000000e+00   \n",
       "43       0.009998  1.839930e-06         0.000998    5.150430e-07   \n",
       "44       0.033670  1.935837e-02         0.001657    4.662995e-04   \n",
       "45       0.089722  2.187283e-02         0.014321    1.602210e-02   \n",
       "46       0.103103  1.621773e-02         0.004671    4.817848e-04   \n",
       "47       0.181660  4.721221e-03         0.007456    3.881487e-04   \n",
       "48       0.015656  1.295869e-02         0.000504    4.072318e-04   \n",
       "49       0.023159  1.792599e-02         0.000997    2.973602e-07   \n",
       "50       0.021970  2.799675e-03         0.000997    3.893359e-07   \n",
       "51       0.045926  1.870149e-03         0.002498    4.072993e-04   \n",
       "52       0.123574  2.841749e-02         0.009179    6.963573e-03   \n",
       "53       0.176349  8.617311e-04         0.007637    4.654786e-04   \n",
       "\n",
       "   param_max_depth param_max_features param_n_estimators  \\\n",
       "0                3                0.6                  5   \n",
       "1                3                0.6                 10   \n",
       "2                3                0.6                 20   \n",
       "3                3                0.6                 50   \n",
       "4                3                0.6                100   \n",
       "5                3                0.6                200   \n",
       "6                3                0.7                  5   \n",
       "7                3                0.7                 10   \n",
       "8                3                0.7                 20   \n",
       "9                3                0.7                 50   \n",
       "10               3                0.7                100   \n",
       "11               3                0.7                200   \n",
       "12               3                0.8                  5   \n",
       "13               3                0.8                 10   \n",
       "14               3                0.8                 20   \n",
       "15               3                0.8                 50   \n",
       "16               3                0.8                100   \n",
       "17               3                0.8                200   \n",
       "18               5                0.6                  5   \n",
       "19               5                0.6                 10   \n",
       "20               5                0.6                 20   \n",
       "21               5                0.6                 50   \n",
       "22               5                0.6                100   \n",
       "23               5                0.6                200   \n",
       "24               5                0.7                  5   \n",
       "25               5                0.7                 10   \n",
       "26               5                0.7                 20   \n",
       "27               5                0.7                 50   \n",
       "28               5                0.7                100   \n",
       "29               5                0.7                200   \n",
       "30               5                0.8                  5   \n",
       "31               5                0.8                 10   \n",
       "32               5                0.8                 20   \n",
       "33               5                0.8                 50   \n",
       "34               5                0.8                100   \n",
       "35               5                0.8                200   \n",
       "36               7                0.6                  5   \n",
       "37               7                0.6                 10   \n",
       "38               7                0.6                 20   \n",
       "39               7                0.6                 50   \n",
       "40               7                0.6                100   \n",
       "41               7                0.6                200   \n",
       "42               7                0.7                  5   \n",
       "43               7                0.7                 10   \n",
       "44               7                0.7                 20   \n",
       "45               7                0.7                 50   \n",
       "46               7                0.7                100   \n",
       "47               7                0.7                200   \n",
       "48               7                0.8                  5   \n",
       "49               7                0.8                 10   \n",
       "50               7                0.8                 20   \n",
       "51               7                0.8                 50   \n",
       "52               7                0.8                100   \n",
       "53               7                0.8                200   \n",
       "\n",
       "                                               params  split0_test_score  \\\n",
       "0   {'max_depth': 3, 'max_features': 0.6, 'n_estim...           0.011931   \n",
       "1   {'max_depth': 3, 'max_features': 0.6, 'n_estim...          -0.040458   \n",
       "2   {'max_depth': 3, 'max_features': 0.6, 'n_estim...           0.015607   \n",
       "3   {'max_depth': 3, 'max_features': 0.6, 'n_estim...          -0.011770   \n",
       "4   {'max_depth': 3, 'max_features': 0.6, 'n_estim...           0.000497   \n",
       "5   {'max_depth': 3, 'max_features': 0.6, 'n_estim...           0.009688   \n",
       "6   {'max_depth': 3, 'max_features': 0.7, 'n_estim...          -0.031099   \n",
       "7   {'max_depth': 3, 'max_features': 0.7, 'n_estim...           0.102758   \n",
       "8   {'max_depth': 3, 'max_features': 0.7, 'n_estim...           0.049465   \n",
       "9   {'max_depth': 3, 'max_features': 0.7, 'n_estim...           0.013459   \n",
       "10  {'max_depth': 3, 'max_features': 0.7, 'n_estim...          -0.018577   \n",
       "11  {'max_depth': 3, 'max_features': 0.7, 'n_estim...           0.007434   \n",
       "12  {'max_depth': 3, 'max_features': 0.8, 'n_estim...           0.032646   \n",
       "13  {'max_depth': 3, 'max_features': 0.8, 'n_estim...          -0.029561   \n",
       "14  {'max_depth': 3, 'max_features': 0.8, 'n_estim...          -0.046467   \n",
       "15  {'max_depth': 3, 'max_features': 0.8, 'n_estim...          -0.032743   \n",
       "16  {'max_depth': 3, 'max_features': 0.8, 'n_estim...          -0.016115   \n",
       "17  {'max_depth': 3, 'max_features': 0.8, 'n_estim...          -0.023183   \n",
       "18  {'max_depth': 5, 'max_features': 0.6, 'n_estim...           0.026031   \n",
       "19  {'max_depth': 5, 'max_features': 0.6, 'n_estim...          -0.018746   \n",
       "20  {'max_depth': 5, 'max_features': 0.6, 'n_estim...           0.006247   \n",
       "21  {'max_depth': 5, 'max_features': 0.6, 'n_estim...          -0.002499   \n",
       "22  {'max_depth': 5, 'max_features': 0.6, 'n_estim...           0.026596   \n",
       "23  {'max_depth': 5, 'max_features': 0.6, 'n_estim...           0.014688   \n",
       "24  {'max_depth': 5, 'max_features': 0.7, 'n_estim...          -0.059936   \n",
       "25  {'max_depth': 5, 'max_features': 0.7, 'n_estim...           0.020886   \n",
       "26  {'max_depth': 5, 'max_features': 0.7, 'n_estim...          -0.026264   \n",
       "27  {'max_depth': 5, 'max_features': 0.7, 'n_estim...          -0.017823   \n",
       "28  {'max_depth': 5, 'max_features': 0.7, 'n_estim...          -0.020721   \n",
       "29  {'max_depth': 5, 'max_features': 0.7, 'n_estim...          -0.015709   \n",
       "30  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.010279   \n",
       "31  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.026352   \n",
       "32  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.009364   \n",
       "33  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.016206   \n",
       "34  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.038427   \n",
       "35  {'max_depth': 5, 'max_features': 0.8, 'n_estim...          -0.024283   \n",
       "36  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.024818   \n",
       "37  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.000713   \n",
       "38  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.035915   \n",
       "39  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.027771   \n",
       "40  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.027008   \n",
       "41  {'max_depth': 7, 'max_features': 0.6, 'n_estim...          -0.005613   \n",
       "42  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.062671   \n",
       "43  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.004716   \n",
       "44  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.059369   \n",
       "45  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.022717   \n",
       "46  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.036976   \n",
       "47  {'max_depth': 7, 'max_features': 0.7, 'n_estim...          -0.033410   \n",
       "48  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.120763   \n",
       "49  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.045893   \n",
       "50  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.062992   \n",
       "51  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.050583   \n",
       "52  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.070222   \n",
       "53  {'max_depth': 7, 'max_features': 0.8, 'n_estim...          -0.049229   \n",
       "\n",
       "    split1_test_score  split2_test_score  mean_test_score  std_test_score  \\\n",
       "0           -0.267017          -0.772371        -0.342486        0.324606   \n",
       "1            0.074414          -0.841659        -0.269234        0.407473   \n",
       "2            0.092408          -1.398652        -0.430212        0.685508   \n",
       "3            0.145918          -1.122996        -0.329616        0.564686   \n",
       "4           -0.021076          -1.007009        -0.342530        0.469941   \n",
       "5            0.107045          -1.005147        -0.296138        0.502918   \n",
       "6           -0.010857          -0.590116        -0.210690        0.268421   \n",
       "7            0.199143          -0.782982        -0.160360        0.442015   \n",
       "8            0.066136          -0.941634        -0.275344        0.471187   \n",
       "9            0.170270          -1.131144        -0.315805        0.580075   \n",
       "10           0.015026          -0.916437        -0.306663        0.431393   \n",
       "11           0.114608          -0.955047        -0.277668        0.480973   \n",
       "12           0.129783          -0.819732        -0.219101        0.426557   \n",
       "13           0.101643          -0.734671        -0.220863        0.367244   \n",
       "14           0.107217          -0.778001        -0.239083        0.386202   \n",
       "15           0.067218          -0.950865        -0.305464        0.458189   \n",
       "16           0.070868          -0.874191        -0.273146        0.426484   \n",
       "17           0.093112          -0.871926        -0.267332        0.430140   \n",
       "18           0.044519          -0.871820        -0.267090        0.427675   \n",
       "19           0.033997          -1.252634        -0.412461        0.594482   \n",
       "20           0.166475          -1.262467        -0.363248        0.639200   \n",
       "21           0.123990          -0.976068        -0.284859        0.491479   \n",
       "22           0.081269          -0.936092        -0.276076        0.467236   \n",
       "23           0.121845          -1.003978        -0.289148        0.507350   \n",
       "24          -0.126986          -0.571151        -0.252691        0.226843   \n",
       "25           0.074631          -1.056952        -0.320478        0.521228   \n",
       "26           0.083769          -0.772292        -0.238262        0.380278   \n",
       "27           0.096124          -1.026653        -0.316117        0.504573   \n",
       "28           0.077207          -0.774130        -0.239215        0.380349   \n",
       "29           0.100692          -0.971696        -0.295571        0.480449   \n",
       "30           0.035184          -1.547559        -0.507551        0.735631   \n",
       "31           0.148951          -0.785199        -0.220866        0.405410   \n",
       "32           0.121444          -0.693454        -0.193791        0.357328   \n",
       "33           0.048136          -0.691690        -0.219920        0.334624   \n",
       "34           0.096230          -0.670879        -0.204359        0.334429   \n",
       "35           0.095271          -0.706264        -0.211759        0.353058   \n",
       "36          -0.054829          -0.992543        -0.357396        0.449283   \n",
       "37           0.043918          -1.557647        -0.504814        0.744688   \n",
       "38          -0.003823          -0.933890        -0.324543        0.431073   \n",
       "39           0.032458          -0.909352        -0.301555        0.430480   \n",
       "40           0.092241          -1.002429        -0.312399        0.490348   \n",
       "41           0.081911          -0.837331        -0.253678        0.414249   \n",
       "42          -0.036661          -0.844820        -0.314717        0.374989   \n",
       "43           0.062929          -0.804379        -0.248722        0.393878   \n",
       "44           0.048052          -0.804091        -0.271803        0.378931   \n",
       "45           0.040574          -0.856462        -0.279535        0.408767   \n",
       "46           0.036089          -0.904484        -0.301790        0.427211   \n",
       "47           0.051653          -0.827706        -0.269821        0.396010   \n",
       "48          -0.035664          -1.196707        -0.451044        0.528406   \n",
       "49          -0.135637          -1.169634        -0.450388        0.509902   \n",
       "50           0.078184          -0.608761        -0.197856        0.296215   \n",
       "51           0.059973          -0.782928        -0.257846        0.374022   \n",
       "52           0.025582          -0.765882        -0.270174        0.352694   \n",
       "53           0.046229          -0.832448        -0.278482        0.393647   \n",
       "\n",
       "    rank_test_score  split0_train_score  split1_train_score  \\\n",
       "0                45            0.520696            0.468920   \n",
       "1                20            0.486739            0.455873   \n",
       "2                50            0.490447            0.465684   \n",
       "3                44            0.479520            0.501131   \n",
       "4                46            0.501761            0.461416   \n",
       "5                33            0.500484            0.500112   \n",
       "6                 5            0.478768            0.419545   \n",
       "7                 1            0.514256            0.546528   \n",
       "8                25            0.490268            0.535132   \n",
       "9                40            0.521178            0.549773   \n",
       "10               37            0.516314            0.483625   \n",
       "11               27            0.519216            0.526067   \n",
       "12                7            0.529599            0.534234   \n",
       "13                9            0.506031            0.598416   \n",
       "14               12            0.546914            0.523112   \n",
       "15               36            0.547735            0.529724   \n",
       "16               24            0.545407            0.545810   \n",
       "17               19            0.541426            0.540428   \n",
       "18               18            0.666743            0.720206   \n",
       "19               49            0.710567            0.719128   \n",
       "20               48            0.687685            0.724144   \n",
       "21               30            0.701773            0.745345   \n",
       "22               26            0.712475            0.732367   \n",
       "23               31            0.724788            0.748583   \n",
       "24               15            0.696360            0.641260   \n",
       "25               42            0.718243            0.759401   \n",
       "26               11            0.733109            0.774990   \n",
       "27               41            0.742306            0.762125   \n",
       "28               13            0.735461            0.765917   \n",
       "29               32            0.734134            0.769875   \n",
       "30               54            0.646393            0.719636   \n",
       "31               10            0.748160            0.782702   \n",
       "32                2            0.739697            0.766334   \n",
       "33                8            0.745642            0.761524   \n",
       "34                4            0.749531            0.774115   \n",
       "35                6            0.750351            0.777953   \n",
       "36               47            0.824906            0.866783   \n",
       "37               53            0.820910            0.864903   \n",
       "38               43            0.844724            0.878825   \n",
       "39               34            0.842723            0.885723   \n",
       "40               38            0.850981            0.881053   \n",
       "41               16            0.849060            0.891865   \n",
       "42               39            0.839811            0.866028   \n",
       "43               14            0.849721            0.882603   \n",
       "44               23            0.867989            0.882474   \n",
       "45               29            0.855983            0.895369   \n",
       "46               35            0.864532            0.898912   \n",
       "47               21            0.859938            0.900367   \n",
       "48               52            0.800050            0.848855   \n",
       "49               51            0.854464            0.912030   \n",
       "50                3            0.867467            0.902057   \n",
       "51               17            0.866989            0.916347   \n",
       "52               22            0.875236            0.909600   \n",
       "53               28            0.871046            0.911872   \n",
       "\n",
       "    split2_train_score  mean_train_score  std_train_score  \n",
       "0             0.399856          0.463157         0.049501  \n",
       "1             0.472481          0.471698         0.012613  \n",
       "2             0.426726          0.460952         0.026228  \n",
       "3             0.417357          0.466003         0.035511  \n",
       "4             0.424123          0.462433         0.031704  \n",
       "5             0.425391          0.475329         0.035312  \n",
       "6             0.417342          0.438552         0.028451  \n",
       "7             0.427486          0.496090         0.050268  \n",
       "8             0.435292          0.486898         0.040829  \n",
       "9             0.452316          0.507756         0.040903  \n",
       "10            0.448998          0.482979         0.027485  \n",
       "11            0.442890          0.496058         0.037699  \n",
       "12            0.449204          0.504345         0.039037  \n",
       "13            0.427265          0.510571         0.069946  \n",
       "14            0.473651          0.514559         0.030515  \n",
       "15            0.466700          0.514720         0.034742  \n",
       "16            0.466337          0.519185         0.037369  \n",
       "17            0.471234          0.517696         0.032856  \n",
       "18            0.590086          0.659012         0.053402  \n",
       "19            0.636801          0.688832         0.036957  \n",
       "20            0.632249          0.681360         0.037782  \n",
       "21            0.622107          0.689741         0.051026  \n",
       "22            0.641500          0.695447         0.039001  \n",
       "23            0.654430          0.709267         0.039974  \n",
       "24            0.567319          0.634980         0.052867  \n",
       "25            0.692128          0.723257         0.027692  \n",
       "26            0.673533          0.727211         0.041629  \n",
       "27            0.651474          0.718635         0.048174  \n",
       "28            0.668425          0.723268         0.040724  \n",
       "29            0.677368          0.727126         0.038090  \n",
       "30            0.660008          0.675346         0.031807  \n",
       "31            0.653067          0.727976         0.054814  \n",
       "32            0.685500          0.730510         0.033633  \n",
       "33            0.687324          0.731496         0.031901  \n",
       "34            0.695360          0.739668         0.032899  \n",
       "35            0.695620          0.741308         0.034215  \n",
       "36            0.783501          0.825063         0.034000  \n",
       "37            0.828533          0.838115         0.019196  \n",
       "38            0.844663          0.856071         0.016090  \n",
       "39            0.824942          0.851129         0.025516  \n",
       "40            0.813577          0.848537         0.027601  \n",
       "41            0.831418          0.857448         0.025380  \n",
       "42            0.744964          0.816934         0.052004  \n",
       "43            0.799870          0.844064         0.034011  \n",
       "44            0.828818          0.859760         0.022664  \n",
       "45            0.852860          0.868071         0.019345  \n",
       "46            0.844304          0.869249         0.022542  \n",
       "47            0.855327          0.871877         0.020233  \n",
       "48            0.830531          0.826479         0.020130  \n",
       "49            0.857876          0.874790         0.026370  \n",
       "50            0.855226          0.874917         0.019831  \n",
       "51            0.870839          0.884725         0.022415  \n",
       "52            0.869157          0.884664         0.017806  \n",
       "53            0.869052          0.883990         0.019732  "
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(grid.cv_results_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:15:39.916539Z",
     "start_time": "2019-10-04T08:15:39.912520Z"
    }
   },
   "outputs": [],
   "source": [
    "rf_reg = grid.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T16:40:21.742603Z",
     "start_time": "2019-10-04T16:40:21.725649Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.44277747297644976"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_reg.score(train_X,train_y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:15:52.716885Z",
     "start_time": "2019-10-04T08:15:52.713892Z"
    }
   },
   "source": [
    "#### 特征重要性分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:27:24.574673Z",
     "start_time": "2019-10-04T08:27:24.571646Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:16:03.763566Z",
     "start_time": "2019-10-04T08:16:03.721666Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.11419842, 0.06606577, 0.62098905, 0.14887585, 0.        ,\n",
       "       0.        , 0.0272279 , 0.00227568, 0.00535941, 0.        ,\n",
       "       0.01500791])"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_reg.feature_importances_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:16:16.620094Z",
     "start_time": "2019-10-04T08:16:16.616105Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['dow', 'dom', 'month', 'year', 'weekend', 'weekend_sat', 'weekend_sun',\n",
       "       'week_of_month', 'period_of_month', 'period2_of_month', 'festival'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:23:57.365764Z",
     "start_time": "2019-10-04T08:23:57.360808Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特征排序\n",
      "feature month (0.620989)\n",
      "feature year (0.148876)\n",
      "feature dow (0.114198)\n",
      "feature dom (0.066066)\n",
      "feature weekend_sun (0.027228)\n",
      "feature festival (0.015008)\n",
      "feature period_of_month (0.005359)\n",
      "feature week_of_month (0.002276)\n",
      "feature period2_of_month (0.000000)\n",
      "feature weekend_sat (0.000000)\n",
      "feature weekend (0.000000)\n"
     ]
    }
   ],
   "source": [
    "print('特征排序')\n",
    "feature_names = ['dow', 'dom', 'month', 'year', 'weekend', 'weekend_sat', 'weekend_sun',\n",
    "       'week_of_month', 'period_of_month', 'period2_of_month', 'festival']\n",
    "feature_importances = rf_reg.feature_importances_\n",
    "# [::-1]反转数组\n",
    "indices = np.argsort(feature_importances)[::-1]\n",
    "for index in indices:\n",
    "    print(\"feature %s (%f)\" %(feature_names[index], feature_importances[index]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:26:52.982710Z",
     "start_time": "2019-10-04T08:26:52.978720Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['month', 'year', 'dow', 'dom', 'weekend_sun', 'festival',\n",
       "       'period_of_month', 'week_of_month', 'period2_of_month',\n",
       "       'weekend_sat', 'weekend'], dtype='<U16')"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array(feature_names)[indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:27:59.768955Z",
     "start_time": "2019-10-04T08:27:59.613341Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([<matplotlib.axis.XTick at 0x1c4f0624a20>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f0624358>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f0624160>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f081eef0>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f0827438>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f0827940>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f0827e48>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f082e390>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f082e898>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f082eda0>,\n",
       "  <matplotlib.axis.XTick at 0x1c4f08382e8>],\n",
       " <a list of 11 Text xticklabel objects>)"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(16,8))\n",
    "plt.title(\"feature importances\")\n",
    "plt.bar(range(len(feature_importances)), feature_importances[indices], color='b')\n",
    "plt.xticks(range(len(feature_importances)), np.array(feature_names)[indices], color='b')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T11:28:13.073556Z",
     "start_time": "2019-10-04T11:28:13.071410Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function sort_values in module pandas.core.series:\n",
      "\n",
      "sort_values(self, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')\n",
      "    Sort by the values.\n",
      "    \n",
      "    Sort a Series in ascending or descending order by some\n",
      "    criterion.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    axis : {0 or 'index'}, default 0\n",
      "        Axis to direct sorting. The value 'index' is accepted for\n",
      "        compatibility with DataFrame.sort_values.\n",
      "    ascending : bool, default True\n",
      "        If True, sort values in ascending order, otherwise descending.\n",
      "    inplace : bool, default False\n",
      "        If True, perform operation in-place.\n",
      "    kind : {'quicksort', 'mergesort' or 'heapsort'}, default 'quicksort'\n",
      "        Choice of sorting algorithm. See also :func:`numpy.sort` for more\n",
      "        information. 'mergesort' is the only stable  algorithm.\n",
      "    na_position : {'first' or 'last'}, default 'last'\n",
      "        Argument 'first' puts NaNs at the beginning, 'last' puts NaNs at\n",
      "        the end.\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    Series\n",
      "        Series ordered by values.\n",
      "    \n",
      "    See Also\n",
      "    --------\n",
      "    Series.sort_index : Sort by the Series indices.\n",
      "    DataFrame.sort_values : Sort DataFrame by the values along either axis.\n",
      "    DataFrame.sort_index : Sort DataFrame by indices.\n",
      "    \n",
      "    Examples\n",
      "    --------\n",
      "    >>> s = pd.Series([np.nan, 1, 3, 10, 5])\n",
      "    >>> s\n",
      "    0     NaN\n",
      "    1     1.0\n",
      "    2     3.0\n",
      "    3     10.0\n",
      "    4     5.0\n",
      "    dtype: float64\n",
      "    \n",
      "    Sort values ascending order (default behaviour)\n",
      "    \n",
      "    >>> s.sort_values(ascending=True)\n",
      "    1     1.0\n",
      "    2     3.0\n",
      "    4     5.0\n",
      "    3    10.0\n",
      "    0     NaN\n",
      "    dtype: float64\n",
      "    \n",
      "    Sort values descending order\n",
      "    \n",
      "    >>> s.sort_values(ascending=False)\n",
      "    3    10.0\n",
      "    4     5.0\n",
      "    2     3.0\n",
      "    1     1.0\n",
      "    0     NaN\n",
      "    dtype: float64\n",
      "    \n",
      "    Sort values inplace\n",
      "    \n",
      "    >>> s.sort_values(ascending=False, inplace=True)\n",
      "    >>> s\n",
      "    3    10.0\n",
      "    4     5.0\n",
      "    2     3.0\n",
      "    1     1.0\n",
      "    0     NaN\n",
      "    dtype: float64\n",
      "    \n",
      "    Sort values putting NAs first\n",
      "    \n",
      "    >>> s.sort_values(na_position='first')\n",
      "    0     NaN\n",
      "    1     1.0\n",
      "    2     3.0\n",
      "    4     5.0\n",
      "    3    10.0\n",
      "    dtype: float64\n",
      "    \n",
      "    Sort a series of strings\n",
      "    \n",
      "    >>> s = pd.Series(['z', 'b', 'd', 'a', 'c'])\n",
      "    >>> s\n",
      "    0    z\n",
      "    1    b\n",
      "    2    d\n",
      "    3    a\n",
      "    4    c\n",
      "    dtype: object\n",
      "    \n",
      "    >>> s.sort_values()\n",
      "    3    a\n",
      "    1    b\n",
      "    4    c\n",
      "    2    d\n",
      "    0    z\n",
      "    dtype: object\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(pd.Series.sort_values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "也可以直接用 pd.Series.plot 来进行简单画图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T11:28:24.948359Z",
     "start_time": "2019-10-04T11:28:24.944376Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "feature_sort = pd.Series(rf_reg.feature_importances_, index=train_X.columns.values).sort_values(ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T11:28:27.826409Z",
     "start_time": "2019-10-04T11:28:27.821422Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "month               0.620989\n",
       "year                0.148876\n",
       "dow                 0.114198\n",
       "dom                 0.066066\n",
       "weekend_sun         0.027228\n",
       "festival            0.015008\n",
       "period_of_month     0.005359\n",
       "week_of_month       0.002276\n",
       "period2_of_month    0.000000\n",
       "weekend_sat         0.000000\n",
       "weekend             0.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_sort"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T11:22:07.178569Z",
     "start_time": "2019-10-04T11:22:07.168116Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on SeriesPlotMethods in module pandas.plotting._core object:\n",
      "\n",
      "class SeriesPlotMethods(BasePlotMethods)\n",
      " |  Series plotting accessor and method\n",
      " |  \n",
      " |  Examples\n",
      " |  --------\n",
      " |  >>> s.plot.line()\n",
      " |  >>> s.plot.bar()\n",
      " |  >>> s.plot.hist()\n",
      " |  \n",
      " |  Plotting methods can also be accessed by calling the accessor as a method\n",
      " |  with the ``kind`` argument:\n",
      " |  ``s.plot(kind='line')`` is equivalent to ``s.plot.line()``\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      SeriesPlotMethods\n",
      " |      BasePlotMethods\n",
      " |      pandas.core.base.PandasObject\n",
      " |      pandas.core.base.StringMixin\n",
      " |      pandas.core.accessor.DirNamesMixin\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  __call__(self, kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, **kwds)\n",
      " |      Make plots of Series using matplotlib / pylab.\n",
      " |      \n",
      " |      *New in version 0.17.0:* Each plot kind has a corresponding method on the\n",
      " |      ``Series.plot`` accessor:\n",
      " |      ``s.plot(kind='line')`` is equivalent to\n",
      " |      ``s.plot.line()``.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      data : Series\n",
      " |      \n",
      " |      kind : str\n",
      " |          - 'line' : line plot (default)\n",
      " |          - 'bar' : vertical bar plot\n",
      " |          - 'barh' : horizontal bar plot\n",
      " |          - 'hist' : histogram\n",
      " |          - 'box' : boxplot\n",
      " |          - 'kde' : Kernel Density Estimation plot\n",
      " |          - 'density' : same as 'kde'\n",
      " |          - 'area' : area plot\n",
      " |          - 'pie' : pie plot\n",
      " |      \n",
      " |      ax : matplotlib axes object\n",
      " |          If not passed, uses gca()\n",
      " |      figsize : a tuple (width, height) in inches\n",
      " |      use_index : boolean, default True\n",
      " |          Use index as ticks for x axis\n",
      " |      title : string or list\n",
      " |          Title to use for the plot. If a string is passed, print the string at\n",
      " |          the top of the figure. If a list is passed and `subplots` is True,\n",
      " |          print each item in the list above the corresponding subplot.\n",
      " |      grid : boolean, default None (matlab style default)\n",
      " |          Axis grid lines\n",
      " |      legend : False/True/'reverse'\n",
      " |          Place legend on axis subplots\n",
      " |      style : list or dict\n",
      " |          matplotlib line style per column\n",
      " |      logx : boolean, default False\n",
      " |          Use log scaling on x axis\n",
      " |      logy : boolean, default False\n",
      " |          Use log scaling on y axis\n",
      " |      loglog : boolean, default False\n",
      " |          Use log scaling on both x and y axes\n",
      " |      xticks : sequence\n",
      " |          Values to use for the xticks\n",
      " |      yticks : sequence\n",
      " |          Values to use for the yticks\n",
      " |      xlim : 2-tuple/list\n",
      " |      ylim : 2-tuple/list\n",
      " |      rot : int, default None\n",
      " |          Rotation for ticks (xticks for vertical, yticks for horizontal plots)\n",
      " |      fontsize : int, default None\n",
      " |          Font size for xticks and yticks\n",
      " |      colormap : str or matplotlib colormap object, default None\n",
      " |          Colormap to select colors from. If string, load colormap with that name\n",
      " |          from matplotlib.\n",
      " |      colorbar : boolean, optional\n",
      " |          If True, plot colorbar (only relevant for 'scatter' and 'hexbin' plots)\n",
      " |      position : float\n",
      " |          Specify relative alignments for bar plot layout.\n",
      " |          From 0 (left/bottom-end) to 1 (right/top-end). Default is 0.5 (center)\n",
      " |      table : boolean, Series or DataFrame, default False\n",
      " |          If True, draw a table using the data in the DataFrame and the data will\n",
      " |          be transposed to meet matplotlib's default layout.\n",
      " |          If a Series or DataFrame is passed, use passed data to draw a table.\n",
      " |      yerr : DataFrame, Series, array-like, dict and str\n",
      " |          See :ref:`Plotting with Error Bars <visualization.errorbars>` for\n",
      " |          detail.\n",
      " |      xerr : same types as yerr.\n",
      " |      label : label argument to provide to plot\n",
      " |      secondary_y : boolean or sequence of ints, default False\n",
      " |          If True then y-axis will be on the right\n",
      " |      mark_right : boolean, default True\n",
      " |          When using a secondary_y axis, automatically mark the column\n",
      " |          labels with \"(right)\" in the legend\n",
      " |      `**kwds` : keywords\n",
      " |          Options to pass to matplotlib plotting method\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |      \n",
      " |      Notes\n",
      " |      -----\n",
      " |      \n",
      " |      - See matplotlib documentation online for more on this subject\n",
      " |      - If `kind` = 'bar' or 'barh', you can specify relative alignments\n",
      " |        for bar plot layout by `position` keyword.\n",
      " |        From 0 (left/bottom-end) to 1 (right/top-end). Default is 0.5 (center)\n",
      " |  \n",
      " |  area(self, **kwds)\n",
      " |      Area plot\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  bar(self, **kwds)\n",
      " |      Vertical bar plot\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  barh(self, **kwds)\n",
      " |      Horizontal bar plot\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  box(self, **kwds)\n",
      " |      Boxplot\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  density = kde(self, bw_method=None, ind=None, **kwds)\n",
      " |  \n",
      " |  hist(self, bins=10, **kwds)\n",
      " |      Histogram\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      bins: integer, default 10\n",
      " |          Number of histogram bins to be used\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  kde(self, bw_method=None, ind=None, **kwds)\n",
      " |      Generate Kernel Density Estimate plot using Gaussian kernels.\n",
      " |      \n",
      " |      In statistics, `kernel density estimation`_ (KDE) is a non-parametric\n",
      " |      way to estimate the probability density function (PDF) of a random\n",
      " |      variable. This function uses Gaussian kernels and includes automatic\n",
      " |      bandwith determination.\n",
      " |      \n",
      " |      .. _kernel density estimation:\n",
      " |          https://en.wikipedia.org/wiki/Kernel_density_estimation\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      bw_method : str, scalar or callable, optional\n",
      " |          The method used to calculate the estimator bandwidth. This can be\n",
      " |          'scott', 'silverman', a scalar constant or a callable.\n",
      " |          If None (default), 'scott' is used.\n",
      " |          See :class:`scipy.stats.gaussian_kde` for more information.\n",
      " |      ind : NumPy array or integer, optional\n",
      " |          Evaluation points for the estimated PDF. If None (default),\n",
      " |          1000 equally spaced points are used. If `ind` is a NumPy array, the\n",
      " |          KDE is evaluated at the points passed. If `ind` is an integer,\n",
      " |          `ind` number of equally spaced points are used.\n",
      " |      **kwds : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : matplotlib.axes.Axes or numpy.ndarray of them\n",
      " |      \n",
      " |      See Also\n",
      " |      --------\n",
      " |      scipy.stats.gaussian_kde : Representation of a kernel-density\n",
      " |          estimate using Gaussian kernels. This is the function used\n",
      " |          internally to estimate the PDF.\n",
      " |      DataFrame.plot.kde : Generate a KDE plot for a\n",
      " |          DataFrame.\n",
      " |      \n",
      " |      Examples\n",
      " |      --------\n",
      " |      Given a Series of points randomly sampled from an unknown\n",
      " |      distribution, estimate its PDF using KDE with automatic\n",
      " |      bandwidth determination and plot the results, evaluating them at\n",
      " |      1000 equally spaced points (default):\n",
      " |      \n",
      " |      .. plot::\n",
      " |          :context: close-figs\n",
      " |      \n",
      " |          >>> s = pd.Series([1, 2, 2.5, 3, 3.5, 4, 5])\n",
      " |          >>> ax = s.plot.kde()\n",
      " |      \n",
      " |      A scalar bandwidth can be specified. Using a small bandwidth value can\n",
      " |      lead to overfitting, while using a large bandwidth value may result\n",
      " |      in underfitting:\n",
      " |      \n",
      " |      .. plot::\n",
      " |          :context: close-figs\n",
      " |      \n",
      " |          >>> ax = s.plot.kde(bw_method=0.3)\n",
      " |      \n",
      " |      .. plot::\n",
      " |          :context: close-figs\n",
      " |      \n",
      " |          >>> ax = s.plot.kde(bw_method=3)\n",
      " |      \n",
      " |      Finally, the `ind` parameter determines the evaluation points for the\n",
      " |      plot of the estimated PDF:\n",
      " |      \n",
      " |      .. plot::\n",
      " |          :context: close-figs\n",
      " |      \n",
      " |          >>> ax = s.plot.kde(ind=[1, 2, 3, 4, 5])\n",
      " |  \n",
      " |  line(self, **kwds)\n",
      " |      Line plot\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |      \n",
      " |      Examples\n",
      " |      --------\n",
      " |      \n",
      " |      .. plot::\n",
      " |          :context: close-figs\n",
      " |      \n",
      " |          >>> s = pd.Series([1, 3, 2])\n",
      " |          >>> s.plot.line()\n",
      " |  \n",
      " |  pie(self, **kwds)\n",
      " |      Pie chart\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      `**kwds` : optional\n",
      " |          Additional keyword arguments are documented in\n",
      " |          :meth:`pandas.Series.plot`.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      axes : :class:`matplotlib.axes.Axes` or numpy.ndarray of them\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from BasePlotMethods:\n",
      " |  \n",
      " |  __init__(self, data)\n",
      " |      Initialize self.  See help(type(self)) for accurate signature.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pandas.core.base.PandasObject:\n",
      " |  \n",
      " |  __sizeof__(self)\n",
      " |      Generates the total memory usage for a object that returns\n",
      " |      either a value or Series of values\n",
      " |  \n",
      " |  __unicode__(self)\n",
      " |      Return a string representation for a particular object.\n",
      " |      \n",
      " |      Invoked by unicode(obj) in py2 only. Yields a Unicode String in both\n",
      " |      py2/py3.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pandas.core.base.StringMixin:\n",
      " |  \n",
      " |  __bytes__(self)\n",
      " |      Return a string representation for a particular object.\n",
      " |      \n",
      " |      Invoked by bytes(obj) in py3 only.\n",
      " |      Yields a bytestring in both py2/py3.\n",
      " |  \n",
      " |  __repr__(self)\n",
      " |      Return a string representation for a particular object.\n",
      " |      \n",
      " |      Yields Bytestring in Py2, Unicode String in py3.\n",
      " |  \n",
      " |  __str__(self)\n",
      " |      Return a string representation for a particular Object\n",
      " |      \n",
      " |      Invoked by str(df) in both py2/py3.\n",
      " |      Yields Bytestring in Py2, Unicode String in py3.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors inherited from pandas.core.base.StringMixin:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pandas.core.accessor.DirNamesMixin:\n",
      " |  \n",
      " |  __dir__(self)\n",
      " |      Provide method name lookup and completion\n",
      " |      Only provide 'public' methods\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(feature_sort.plot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T11:26:08.618055Z",
     "start_time": "2019-10-04T11:26:08.502240Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c4f0c14208>"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "feature_sort.plot(kind='bar',title=\"feature importances\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 结果预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:28:05.280195Z",
     "start_time": "2019-10-04T08:28:05.276208Z"
    }
   },
   "outputs": [],
   "source": [
    "predictions = rf_reg.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:28:08.199767Z",
     "start_time": "2019-10-04T08:28:08.196111Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3883798.81035388, 3800451.81848126, 3922608.22080472,\n",
       "       3922608.22080472, 3922608.22080472, 3922608.22080472,\n",
       "       3948793.61358301, 3975820.40553906, 3800451.81848126,\n",
       "       4040815.20876819, 4040815.20876819, 4040815.20876819,\n",
       "       4040815.20876819, 4040815.20876819, 3975820.40553906,\n",
       "       3814392.47522923, 4062535.50984891, 4062535.50984891,\n",
       "       4062535.50984891, 4062535.50984891, 4087427.89686148,\n",
       "       3998029.00122174, 3839284.8622418 , 4087427.89686148,\n",
       "       4087427.89686148, 4087427.89686148, 4087427.89686148,\n",
       "       4087427.89686148, 3998029.00122174, 3839284.8622418 ,\n",
       "       4087427.89686148])"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:28:18.908401Z",
     "start_time": "2019-10-04T08:28:18.904447Z"
    }
   },
   "outputs": [],
   "source": [
    "test_df.loc[:,'power_consumption'] = predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-10-04T08:28:21.980573Z",
     "start_time": "2019-10-04T08:28:21.973592Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>record_date</th>\n",
       "      <th>power_consumption</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>3.883799e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-10-02</td>\n",
       "      <td>3.800452e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-10-03</td>\n",
       "      <td>3.922608e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-10-04</td>\n",
       "      <td>3.922608e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-10-05</td>\n",
       "      <td>3.922608e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  record_date  power_consumption\n",
       "0  2016-10-01       3.883799e+06\n",
       "1  2016-10-02       3.800452e+06\n",
       "2  2016-10-03       3.922608e+06\n",
       "3  2016-10-04       3.922608e+06\n",
       "4  2016-10-05       3.922608e+06"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_df.to_csv('tree_model_reg.csv', index=None)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "191px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
